我在尝试查找列表中所有dataframe之间的公用变量时遇到了问题。
我找到了this link。
但这并不能解决我的问题,因为他们只使用here::here()
进行比较,而我对列中的变量感兴趣。
首先,我有一个数据帧列表,将其称为list1。
colname
现在,我想输出所有>list1
[[1]]
V1 V2 V3
1 "a" 1
2 "b" 9
3 "c" 3
[[2]]
V1 V2 V3
1 "c" 5
2 "d" 4
3 "e" 6
#and so on..... for 22 times
之间共有的所有list1[[i]]$V2
变量的数组。因此,如果其余20个dataframe
都看起来像dataframe
,则输出应为list1[[2]]
;因为它是所有c
之间唯一的公用V2
变量。
我尝试使用dataframe
并使用do.call("rbind", list1)
查找常见的dplyr
,但是我似乎无法弄清楚。另外,我知道在这种情况下可以使用V2
,但是使用intersect()
似乎是解决问题的一种非常低效的方法,我也想在其他列表上执行此操作。任何帮助将不胜感激。
非常感谢您,
-奥马尔。
答案 0 :(得分:2)
这里是tidyverse
解决方案,使用purrr::map
和purrr::reduce
...
library(tidyverse)
set.seed(999)
#first generate some data
dflist <- map(1:3,~tibble(V1=sample(letters[1:5],3),V2=sample(1:5,3)))
dflist
[[1]]
# A tibble: 3 x 2
V1 V2
<chr> <int>
1 b 5
2 c 4
3 a 1
[[2]]
# A tibble: 3 x 2
V1 V2
<chr> <int>
1 d 4
2 a 2
3 b 5
[[3]]
# A tibble: 3 x 2
V1 V2
<chr> <int>
1 a 4
2 d 1
3 e 3
#then...
map(dflist, ~.$V1) %>% #create a list just of the column of interest
reduce(intersect) #apply the intersect function cumulatively to the list
[1] "a"