R:从数据框中提取特定的行和列

时间:2015-03-11 20:56:22

标签: r

我正在尝试简化我用于从大型数据框中提取特定行和列的脚本,然后单独绘制一个脚本,以便我可以绘制图形。到目前为止,我一直在使用for循环来一次取出位,然后rbind()将它们放在一起,但我认为必须有更好的解决方案。希望我可以通过一个代表性的例子来说明我一直试图做的事情:

a <- rep(1:8, each=40)
b <- rep(rep(1:4, each=5), times=16)
c <- runif(320)
d <- runif(320)

df <- data.frame(a,b,c,d)

我想要做的是获取ab的特定值的这些列。所以我想,例如,为了得到a为1或2的行,我可以这样做:

extract.a = c(1,2)
extractcolumns = c("a", "b", "c", "d")
extracted <- df[a == extract.a, extractcolumns]

(我已经离开了extractcolumns位,即使在这种情况下我不需要它,但在实际情况下我想从17列中取出5列。问题是这种工作,但只占用每一行,如果我改变,例如,

extract.a = c(1,2,4)

然后它需要每隔三行。我不确定它在这里做了什么,所以我一直坚持如何解决它。我最不想做的是选择行a是多个值之一,b也是两个值之一。类似的东西:

 extract.b = c(1,4)
 extracted <- df[a == extract.a & b == extract.b, extractcolumns]

......但显然这也不对。这有效,例如:

 extracted <- df[(a == 1 | a == 2 | a == 4) & (b == 1 | b == 3), extractcolumns]

但是我希望能够定义a和b的值,我想在其他地方定义,如上所述。

我希望这很清楚!

1 个答案:

答案 0 :(得分:1)

解决方案是使用%in%运算符代替==运算符,它可以执行多个比较

df[a %in% extract.a & b %in% extract.b, extractcolumns]