我有几个具有相似(但不相同)系列变量(列)的数据框。我想找到一种方法让 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)`
Run Code Online (Sandbox Code Playgroud)
对于df1和df2,我希望 R 有某种方式告诉我公共变量是b和c。
1)对于2个数据帧:
intersect(names(df1), names(df2))
## [1] "b" "c"
Run Code Online (Sandbox Code Playgroud)
要获取 df1 中但不在 df2 中的名称:
setdiff(names(df1), names(df2))
Run Code Online (Sandbox Code Playgroud)
1a)对于任意数量的数据帧(即获取所有数据帧的通用名称):
L <- list(df1, df2)
Reduce(intersect, lapply(L, names))
## [1] "b" "c"
Run Code Online (Sandbox Code Playgroud)
2)另一种方法是使用duplicated,因为如果我们连接两个数据帧的名称,通用名称将是重复的。
nms <- c(names(df1), names(df2))
nms[duplicated(nms)]
## [1] "b" "c"
Run Code Online (Sandbox Code Playgroud)
2a)将其推广到 n 个数据帧,使用table并查找与数据帧出现次数相同的名称:
L <- list(df1, df2)
tab <- table(unlist(lapply(L, names)))
names(tab[tab == length(L)])
## [1] "b" "c"
Run Code Online (Sandbox Code Playgroud)