所以目前,我有三个数据框:
>df1
Variable Val
a 0.9
g 0.3
e 0.1
>df2
Variable Val
h 0.2
a 0.7
e 0.9
>df3
Variable Val
z 0.5
a 0.7
e 0.9
并且我试图提取出现在所有三个数据框中的变量,在这种情况下为a和e,因为 a 和 e 出现在df1中, df2和df3。
因此我想要的输出是:
[1] a e
这只是变量,没有val。
我尝试过类似的事情:
similar <- subset(df1, Variable%in% df2$Variable)
但是似乎它只限于两个数据帧而不是三个?
答案 0 :(得分:0)
一种选择是将数据集放置在list
中,提取“变量”列,并获取与intersect
相同的元素
Reduce(intersect, lapply(mget(paste0("df", 1:3)), `[[`, "Variable"))
#[1] "a" "e"
或tidyverse
的类似选项
library(tidverse)
mget(paste0("df", 1:3)) %>%
map(~ .x %>%
pull(Variable)) %>%
reduce(intersect)
#[1] "a" "e"
或者我们将数据集绑定到一个单一的数据集中,按“变量”分组,filter
等于3的唯一组数,然后提取“变量”
bind_rows(df1, df2, df3, .id = 'grp') %>%
group_by(Variable) %>%
filter(n_distinct(grp) == 3) %>%
distinct(Variable) %>%
pull(Variable)
[1]“ a”“ e”
df1 <- structure(list(Variable = c("a", "g", "e"), Val = c(0.9, 0.3,
0.1)), class = "data.frame", row.names = c(NA, -3L))
df2 <- structure(list(Variable = c("h", "a", "e"), Val = c(0.2, 0.7,
0.9)), class = "data.frame", row.names = c(NA, -3L))
df3 <- structure(list(Variable = c("z", "a", "e"), Val = c(0.5, 0.7,
0.9)), class = "data.frame", row.names = c(NA, -3L))