如何在不同的数据框中找到公共变量?

时间:2018-10-17 17:01:22

标签: r dataframe

我有几个数据帧,它们具有类似(但不相同)的一系列变量(列)。我想找到一种方法,让R告诉我不同​​数据帧之间的共同变量是什么。

示例:

`a <- c(1, 2, 3)
b <- c(4, 5, 6)
c <- c(7, 8, 9)
df1 <- data.frame(a, b, c)
b <- c(1, 3, 5)
c <- c(2, 4, 6)
df2 <- data.frame(b, c)`

对于df1df2,我想让R告诉我,公共变量是bc

2 个答案:

答案 0 :(得分:3)

使用intersect

intersect(colnames(df1),colnames(df2))

OR

我们也可以使用%in%检查名称:

colnames(df1)[colnames(df1) %in% colnames(df2)]

输出:

[1] "b" "c"

答案 1 :(得分:1)

1)对于2个数据帧:

intersect(names(df1), names(df2))
## [1] "b" "c"

要获取df1中的名称,而不是df2中的名称:

setdiff(names(df1), names(df2))

1a)并针对任意数量的数据帧(即获取所有数据帧的通用名称):

L <- list(df1, df2)
Reduce(intersect, lapply(L, names))
## [1] "b" "c"

2)一种替代方法是使用duplicated,因为如果我们将两个数据帧的名称连接在一起,则公用名称将是重复的名称。

nms <- c(names(df1), names(df2))
nms[duplicated(nms)]
## [1] "b" "c"

2a)要将其推广到n个数据帧,请使用table并查找出现与数据帧相同次数的名称:

L <- list(df1, df2)
tab <- table(unlist(lapply(L, names)))
names(tab[tab == length(L)])
## [1] "b" "c"