繁体   English   中英

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

[英]How to identify unique columns in a data frame with respect to other data frames?

如果我有多个数据框,如何识别特定数据框所独有的列?

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 中没有唯一的列。

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

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

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

我们可以使用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"

你也可以使用“不在”使用! %in%在每个 df 的colnames上获取一个 df 与其他 df 相比唯一的列名。

colnames(df1)[!(colnames(df1) %in% c(colnames(df2),colnames(df3)))]
#[1] "A"
colnames(df2)[!(colnames(df2) %in% c(colnames(df1),colnames(df3)))]
#character(0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM