Как вы можете объединить один столбец на основе всех других столбцов?
У меня есть большое количество файлов 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