Как вы можете объединить один столбец на основе всех других столбцов?

У меня есть большое количество файлов CSV, которые содержат данные опроса. В результате я знаю, что есть много дублированных данных. Таким образом, я хочу обобщить данные, найдя частоту уникальных ответов. Обычно я делаю это, вставляя столбец частоты со значением один, а затем суммируя его. Вот так:

data = aggregate(data$Freq, by = list(ONE = data$ONE, TWO = data$TWO, THREE  = data$THREE), FUN = sum)

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

data = data.frame(
   ONE   = sample(1:2, 40, TRUE), 
   TWO   = sample(1:2, 40, TRUE),
   THREE = sample(1:5, 40, TRUE)); 
data$Freq = 1

Как я могу сохранить уникальные значения и найти количество их появления?

1 ответ

Если вы хотите сделать это без создания переменной Freq=1, вы можете создать ее "на лету":

> head(data)
  ONE TWO THREE
1   D   D     C
2   A   B     C
3   C   B     D
4   A   A     D
5   A   B     A

> aggregate(rep(1,nrow(data)) ~ ., data=data, sum)

   ONE TWO THREE rep(1, nrow(data))
1    B   A     A                  1
2    C   A     A                  3
3    D   A     A                  2
4    A   B     A                  1
5    D   B     A                  1

Но это дает грубое имя столбцу. Оберните это в setNames:

> setNames(aggregate(rep(1,nrow(data)) ~ ., data=data, sum), c(names(data),"Freq"))
   ONE TWO THREE Freq
1    B   A     A    1
2    C   A     A    3
3    D   A     A    2
4    A   B     A    1
5    D   B     A    1
Другие вопросы по тегам