我有几个数据帧,它们具有类似(但不相同)的一系列变量(列)。我想找到一种方法,让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)`
对于df1
和df2
,我想让R告诉我,公共变量是b
和c
。
答案 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"