我在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
答案 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