我正在尝试简化我用于从大型数据框中提取特定行和列的脚本,然后单独绘制一个脚本,以便我可以绘制图形。到目前为止,我一直在使用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)
我想要做的是获取a
和b
的特定值的这些列。所以我想,例如,为了得到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的值,我想在其他地方定义,如上所述。
我希望这很清楚!
答案 0 :(得分:1)
解决方案是使用%in%
运算符代替==
运算符,它可以执行多个比较
df[a %in% extract.a & b %in% extract.b, extractcolumns]