#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
. iC = 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]