Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以根据r中的行范围和逻辑条件对data.frame进行子集划分?_R - Fatal编程技术网

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

是否可以根据r中的行范围和逻辑条件对data.frame进行子集划分?,r,R,在base 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的命令进行过滤,但是使用行范围比使用条件加载要快得多,添

在base 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的命令进行过滤,但是使用行范围比使用条件加载要快得多,添加多个条件意味着我有时需要等待一天才能加载数据。

您可以使用任何一种方法进行子集设置

  • 基于逻辑向量:
  • 根据行范围:

  • 如果您以交互方式工作,我将使用
    子集

    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
    
    或者存储中间结果

    tt <- mtcars[1:5,]
    tt[tt$cyl==6,]
    rm(tt)
    
    或者存储我在这种情况下建议的
    1:5

    i <- 1:5
    mtcars[i[mtcars$cyl[i]==6],]
    rm(i)
    

    i这些都是很好的答案,但是对于这个需要读取非常大文件的用例,我无法复制数据。我不确定LaF是否接受子集命令,但会检查它。也许你可以试试
    我你知道其中哪一个可能更快吗?诀窍是找到一种方法让LaF只在行范围内搜索,而不必计算完整的数据集(30 GB)。我担心nrow()可能会迫使它这样做。是的,在第一个选项中,我们正在生成从1到
    nrow
    的序列,这可能没有效率。您可以使用
    intersect
    方法。更好的是
    mtcars[intersect(1:5,即mtcars$cyl[1:5]==6)),]
    tt <- mtcars[1:5,]
    tt[tt$cyl==6,]
    rm(tt)
    
    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
    
    i <- 1:5
    mtcars[i[mtcars$cyl[i]==6],]
    rm(i)