[英]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 中沒有唯一的列。
您可以使用Reduce
和setdiff
處理任意數量的比較數據集。 第一個命名的數據集將與其余數據集進行比較。
Reduce(setdiff, lapply(list(df1,df2,df3), names))
#[1] "A"
Reduce(setdiff, lapply(list(df2,df1,df3), names))
#character(0)
我們可以使用setdiff
和union
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.