R: совокупный фрейм данных, условно подсчитывающий факторные переменные

#r #aggregate

#r #совокупный

Вопрос:

Я новичок в R, и, похоже, я не могу понять это: я хочу агрегировать факторы в фрейме данных путем подсчета вхождений определенного значения (в данном случае значения «Да»). Также существует множество N / As, а именно:

Текущий:

 Agg  Factor1  Factor2  Factor3
A1   Yes      Yes      Yes
A1   Yes      Yes      No
A1   Yes      N/A      No
A1   N/A      No       N/A
A2   Yes      Yes      No
A2   N/A      Yes      N/A
A2   No       N/A      N/A
 

Желаемый результат:

 Agg F1 F2 F3
A1  3  2  1
A2  1  2  0
 

В идеале я хотел бы, чтобы ответ был базовым R, поскольку я пытаюсь научиться .. конечно, если есть более простое решение, использующее пакет, мне также было бы интересно.

Данные

 dd <- read.table(header = TRUE, na.strings = "N/A", text = 
"Agg  Factor1  Factor2  Factor3
A1   Yes      Yes      Yes
A1   Yes      Yes      No
A1   Yes      N/A      No
A1   N/A      No       N/A
A2   Yes      Yes      No
A2   No       Yes      N/A
A2   N/A      No       N/A")
 

Комментарии:

1. Ммм, это (предложение @G.Grothendieck), похоже, не работает, я думаю, потому что в данных N / As. Все суммы равны N / A. То же самое с предложением @rawr.

2. Преобразуйте столбцы в символьные, а затем используйте решение @rawr : dd[] <- lapply(dd, as.character) . Обратите внимание, что в нем нет NAS, dd потому что N / A — это уровень фактора, а не NA. Если вы предполагали, что это будет N / A, вам нужно будет изменить свой read.table оператор и использовать sum(..., na.rm = TRUE) .

3. Спасибо за вашу помощь. «, na.rm = TRUE» сделал это, и я исправил приведенную выше инструкцию read.table.

Ответ №1:

Сравнения с фактором работают с метками, поэтому это будет работать независимо от того, являются ли столбцы факторов факторами или строками:

 aggregate(dd[-1L]=='Yes',dd[1L],sum,na.rm=T);
##   Agg Factor1 Factor2 Factor3
## 1  A1       3       2       1
## 2  A2       1       2       0
 

Комментарии:

1. Да, моя проблема заключалась в частом NAs — Я не мог видеть дерево для деревьев. Добавление na.rm=TRUE привело меня к этому. Спасибо.