使用r中另一个数据帧中的两列,在一个数据帧中对列进行子类化

时间:2017-05-25 10:37:02

标签: r dataframe subset

我在SO上尝试过类似的问题但是不能。

我有两个数据框。我想使用另一个数据帧中的两列在一个数据帧中对一列进行子集化。

数据框如下。

df1 <- data.frame(x = c(22,23,22,34,21),
                  y = c(1,4,2,3,2))
df1
   x y
1 22 1
2 23 4
3 22 2
4 34 3
5 21 2

df2 <- data.frame(a = c("John", "Matt", "foo","boo"),
                  b = c(4, NA, NA,2), 
                  c = c(3, NA, 3, 3))


df2

     a  b  c
1 John  4  3
2 Matt NA NA
3  foo NA  3
4  boo  2  3

我想使用向量化操作使用数据框 df2 中的列b和c对列 df1 $ y 进行子集化。 输出应按列表形式显示如下

df1

df1[1]
   x y
2 23 4
4 34 3

df1[2]


df1[3]
   x y
4 34 3


df1[4]
   x y
3 22 2
4 34 3
5 21 2

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

dfnew<-list()
for (i in 1:nrow(df2)){
  dfnew[[i]]<-df1[which(df1$y %in% df2[i,2:3]),]
}

结果:

dfnew
[[1]]
   x y
2 23 4
4 34 3

[[2]]
[1] x y
<0 rows> (or 0-length row.names)

[[3]]
   x y
4 34 3

[[4]]
   x y
3 22 2
4 34 3
5 21 2

答案 1 :(得分:1)

我们可以使用default Predicate<T> negate() { return (t) -> !test(t); }

lapply