【发布时间】:2014-02-21 10:29:13
【问题描述】:
我有一个固定的无数字列和任意数字列的数据框,如下所示:
s <- data.frame(A=c("a","b","c"),B=c(1,2,3), C=c(24,15,2))
我还有两个向量,它们的长度与定义每列的最小值和最大值的数值列数相同。
min <- c(2,10)
max <- c(3,30)
我想用 B 列在 2 到 3 之间,C 列在 10 到 30 之间的所有行对数据框进行子集化。像这样:
s <- s[s$B >= min[1] & s$B <= max[1] & s$C >= min[2] & s$C <= max[2],]
现在要为任意数量的数字列设置数据帧的子集,我使用 for 语句:
for(i in 1:length(min))
s <- s[s[,i+1] >= min[i] & s[,i+1] <= max[i],]
这可以完成工作,但速度很慢。我在数据框中有大约 20 列和 150K 行。
有更好的方法吗?
【问题讨论】:
标签: r