查找数据帧列表之间的唯一变量相交

时间:2018-12-20 17:02:39

标签: r list 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()似乎是解决问题的一种非常低效的方法,我也想在其他列表上执行此操作。任何帮助将不胜感激。

非常感谢您,

-奥马尔。

1 个答案:

答案 0 :(得分:2)

这里是tidyverse解决方案,使用purrr::mappurrr::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"