如何相对于其他数据帧识别数据帧中的唯一列?

时间:2020-01-22 00:08:28

标签: r

如果我有几个数据框,如何确定某个数据框唯一的列?

df1 <- data.frame(A=rnorm(5), B=rnorm(5), C=rnorm(5))
df2 <- data.frame(B=rnorm(5), C=rnorm(5), D=rnorm(5))
df3 <- data.frame(B=rnorm(5), C=rnorm(5), D=rnorm(5))

我想要实现的是诸如unique()函数之类的功能,该函数为我提供了数据框中相对于其他数据框的唯一列。

unique.columns(df1, c(df2, df3))
[1] "A"

但是

unique.columns(df2, c(df1, df3))
[1] NA

因为df2中没有唯一列。

3 个答案:

答案 0 :(得分:2)

您可以结合使用Reducesetdiff来轻松处理任意数量的比较数据集。第一个命名的数据集将与其余数据进行比较。

Reduce(setdiff, lapply(list(df1,df2,df3), names))
#[1] "A"

Reduce(setdiff, lapply(list(df2,df1,df3), names))
#character(0)

答案 1 :(得分:1)

我们可以使用setdiffunion

unique.columns <- function(df1, df2, df3) {
   setdiff(names(df1), union(names(df2), names(df3)))
}

unique.columns(df1, df2, df3)
#[1] "A"

unique.columns(df2, df1, df3)
#character(0)

如果您要将可变数量的数据帧传递给该函数,则可以更改该函数

unique.columns <- function(df1, ...) {
   temp <- list(...)
   setdiff(names(df1), unique(c(sapply(temp, names))))
}

unique.columns(df1, df3)
#[1] "A"

答案 2 :(得分:0)

您还可以在每个df的React Native上使用!%in%来使用“ not in”,以获取一个df与其他df相比唯一的列名。

colnames