Использование dplyr
:
data %>%
group_by(location) %>%
mutate(TOTlocation=n(),TOTitems=sum(items))
И вот базовое решение, которое делает почти то же самое:
data[c("TOTloc","TOTitem")]<-t(sapply(data$location, function(x)
c(TOTloc=sum(data$location==x),
TOTitem=sum(data$items[data$location==x]))))
Обратите внимание, что ни в одном из случаев вам не нужно ничего сортировать - в dplyr
вы можете использовать group_by
, чтобы каждое действие выполнялось только для той части набора данных, которая принадлежит группе, определяемой содержимым определенного столбца. В моем базовом решении я разбиваю список местоположений, используя sapply
, а затем снова пересчитываю TOTlo c и TOTitem для каждой строки. Это может быть не очень эффективным решением. Лучшее решение, вероятно, будет использовать split
, но по какой-то причине я не смог заставить его работать с моим составленным набором данных, поэтому, возможно, кто-то еще может подсказать, как лучше всего это сделать.