Манипулирование данными в R: Столбец, разделенный на количество строк, содержащих соответствующее значение

#r #dplyr

Вопрос:

 A = c(10009, 10009, 10009, 10009, 10011, 10011, ...) B = c(23908, 230908, 230908,230908, 23514, 23514, ...)  

У меня есть фрейм данных с указанными выше 2 столбцами. Как создать третий столбец, C, который является B, разделенным на количество строк, содержащих соответствующее значение в столбце A?

Я попробовал сделать следующее, но ошибка: «проблема с mutate(), столбец C».

 DF = DF %gt;%  group_by(A) %gt;%  mutate(C = B/n(A))  

Ответ №1:

Ты имел в виду length :

 DF %gt;%  group_by(A) %gt;%  mutate(C = B / length(A))  

Результат на примере набора данных:

 A B C  lt;dblgt; lt;dblgt; lt;dblgt; 1 10009 23908 5977 2 10009 230908 57727 3 10009 230908 57727 4 10009 230908 57727 5 10011 23514 11757 6 10011 23514 11757  

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

1. Я столкнулся с этой ошибкой: Ошибка: Проблема со mutate() столбцом count . i C = B/nrow(A) . я C должен быть размером 4 или 1, а не 0.

2. @Грейс Упс! Извините, отредактировал мой!

3. @Грейс Рада помочь!! Не стесняйтесь отмечать, когда истекает время 😛

Ответ №2:

n() не принимает никаких аргументов. Попробуй —

 library(dplyr)  DF lt;- DF %gt;% group_by(A) %gt;% mutate(C = B/n()) %gt;% ungroup  

Ответ №3:

Обновление: Сначала можно использовать более длинную версию (возможно, не лучшую) для вашей задачи add_count , а затем изменить: С помощью этой более длинной версии вы можете выполнить следующие действия:

 library(dplyr) df %gt;%  group_by(A) %gt;%  add_count() %gt;%   mutate(C = B/n) %gt;%   ungroup() %gt;%   select(-n)  

выход:

 A B C  lt;dblgt; lt;dblgt; lt;dblgt; 1 10009 23908 5977 2 10009 230908 57727 3 10009 230908 57727 4 10009 230908 57727 5 10011 23514 11757 6 10011 23514 11757  

Первый ответ на несколько секунд отстает от Ронака Шаха!

 library(dplyr) df %gt;%  group_by(A) %gt;%  mutate(C = B/n())  

Ответ №4:

С помощью data.table

 library(data.table) setDT(DF)[, C := B/.N, A]