【发布时间】:2021-10-25 08:44:08
【问题描述】:
我正在尝试在与另一个数据框的任何值匹配的数据框列表中查找值。
以下作品:
a <- c(1,2,3,4,5)
b <- list(a = c(9,8,5,7,6),
b = c(9,5,8,7,6))
lapply(b, function(x) x %in% a)
$a
[1] FALSE FALSE TRUE FALSE FALSE
$b
[1] FALSE TRUE FALSE FALSE FALSE
但实际上,列表不是由向量组成,而是由数据帧组成,如下所示:
df1 <- tibble(a = c(111, 222, 333, 444, 555))
df2 <- tibble(a = c(11, 22, 33, 44, 55),
b = c(1111, 2222, 3333, 4444, 5555),
c = c(11111, 2222, 333, 4444, 55555),
d = c(1, 2, 3, 4, 5))
df3 <- tibble(a = c(11, 22, 33, 44, 55),
b = c(11211, 2222, 3333, 4444, 5555),
c = c(11111, 2222, 333, 4444, 55555),
d = c(1, 2, 3, 4, 5))
l <- list(df2, df3)
当应用相同的功能时,我得到以下,这绝对不是我想要的:
lapply(l, function(x) x %in% df1$a)
[[1]]
[1] FALSE FALSE FALSE FALSE
[[2]]
[1] FALSE FALSE FALSE FALSE
我猜它不是在每个 tibble 的每一列中的每个值上迭代 df1$a 中的所有值,但为什么不呢? “333”应该在列表中出现两次。我还希望它返回列表中的所有 40 个值,无论是 TRUE 还是 FALSE。没看懂。
【问题讨论】:
标签: r