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

Мой набор данных примерно такой ... у него гораздо больше строк и столбцов, чем это:

           x1       x2      x3      x4
part 1      1       1       1       1
part 2      0       1       1       0
part 3      0       0       0       1
part 4      1       0       1       1
part 5      1       1       1       1

Я хочу сравнить столбцы в различных комбинациях (x1 x2, x1 x3, x1 x4, x1 x2 x3, x1 x2 x4, x1 x3 x4, x2 x3 x4, x1 x2 x3 x4), чтобы найти максимальное количество деталей общий.

Я могу использовать combn для получения различных комбинаций столбцов, но я не знаю, как сравнивать различные столбцы. Для all.equal требуется 2 разных набора данных, где я хочу сравнить различные столбцы в одном наборе данных. Я новичок. Пожалуйста, дайте мне предложения. Заранее спасибо !!

1 Ответ

0 голосов
/ 22 мая 2019

Одним из подходов может быть использование outer.Здесь определяется вспомогательная функция comp_cols, которая берет два вектора имен столбцов и вычисляет, равны ли соответствующие столбцы dat.

# slightly modified data.frame from question
dat <- data.frame(x1=c(1,0,0,1,1), x2=c(1,1,0,0,1), x3=c(1,1,0,1,1), x4=c(1,0,0,1,1))

# compare function
comp_cols <- function(x,y) {
    ans <- rep(NA, length(x))
    for (i in seq_along(x)) ans[i] <- all(dat[,x[i]]==dat[,y[i]])
    return(ans)
}

# compare each combination
res <- outer(colnames(dat), colnames(dat), FUN=comp_cols)
rownames(res) <- colnames(dat)
colnames(res) <- colnames(dat)

Это, вероятно, не самое эффективное решение, так какМатрица результата симметрична и, следовательно, требуется только половина расчетов.Если время вычислений является проблемой, использование combn может быть быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...