簡體   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