是否可以根据 r 中的行范围和逻辑条件对 data.frame 进行子集化?

Joh*_*egg 2 r

在基 r 中,我可以根据行范围对 data.frame 进行子集化:

mtcars[1:5,]

或者我可以根据逻辑条件进行子集:

mtcars[mtcars$cyl==6,]

但我似乎无法同时做到:

mtcars[1:5 & mtcars$cyl==6,]

警告信息:在 1:5 & mtcars$cyl == 6 中:较长的对象长度不是较短对象长度的倍数

有没有另一种方法可以做到这一点?

用例是使用 LaF 包加载一个巨大的 .csv 文件,它允许使用类似于 base r 的命令进行过滤,但是使用行范围比使用条件加载内容要快得多,并且添加多个条件意味着我有时会等待一天的数据加载。

GKi*_*GKi 5

如果您以交互方式工作,我会使用subset.

subset(mtcars[1:5,], cyl==6)
#                mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Run Code Online (Sandbox Code Playgroud)

或者存储中间结果。

tt <- mtcars[1:5,]
tt[tt$cyl==6,]
rm(tt)
Run Code Online (Sandbox Code Playgroud)

或者,您可以链接您的两个条件。

mtcars[(1:5)[mtcars$cyl[1:5]==6],]
#mtcars[1:5,][mtcars$cyl[1:5]==6,] #Alternative
#mtcars[1:5,][mtcars[1:5,]$cyl==6,] #Alternative
Run Code Online (Sandbox Code Playgroud)

或存储1:5我在这种情况下推荐的内容。

i <- 1:5
mtcars[i[mtcars$cyl[i]==6],]
rm(i)
Run Code Online (Sandbox Code Playgroud)