Как идентифицировать уникальные столбцы в фрейме данных относительно других фреймов данных? - PullRequest
1 голос
/ 22 января 2020

Если у меня есть несколько фреймов данных, как я могу определить столбцы, которые являются уникальными для определенного фрейма данных?

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 ]

2 голосов
/ 22 января 2020

Вы можете использовать Reduce вместе с setdiff, чтобы легко справиться с любым количеством наборов данных сравнения. Первый именованный набор данных будет сравниваться с остальными.

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

Reduce(setdiff, lapply(list(df2,df1,df3), names))
#character(0)
1 голос
/ 22 января 2020

Мы можем использовать 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"
0 голосов
/ 22 января 2020

Вы также можете использовать «not in», используя ! и %in% на colnames каждого df, чтобы получить имена столбцов, которые уникальны для одного df по сравнению с другими dfs.

colnames(df1)[!(colnames(df1) %in% c(colnames(df2),colnames(df3)))]
#[1] "A"
colnames(df2)[!(colnames(df2) %in% c(colnames(df1),colnames(df3)))]
#character(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...