Как суммировать значения числовой переменной на основе строковой переменной - PullRequest
2 голосов
/ 07 мая 2019

Рассмотрим следующий кадр данных:

df <- data.frame(numeric=c(1,2,3,4,5,6,7,8,9,10), string=c("a", "a", "b", "b", "c", "d", "d", "e", "d", "f"))
print(df)
numeric string
1        1      a
2        2      a
3        3      b
4        4      b
5        5      c
6        6      d
7        7      d
8        8      e
9        9      d
10      10      f

Имеет числовую и строковую переменную. Теперь я хотел бы создать еще один фрейм данных, в котором строковая переменная отображает только список уникальных значений «a», «b», «c», «d», «e», «f», а числовая переменная имеет вид результат суммы числовых значений в предыдущем кадре данных, в результате чего получается этот кадр данных:

print(new_df)
numeric string
1        3      a
2        7      b
3        5      c
4       22      d
5        8      e
6       10      f

Это можно сделать с помощью цикла for, но это будет довольно неэффективно в больших наборах данных, и я бы предпочел другие варианты. Я попытался использовать пакет dplyr, но я не получил ожидаемый результат:

library(dplyr)
> df %>% group_by(string) %>% summarize(result = sum(numeric))
result
1     55

Ответы [ 2 ]

4 голосов
/ 07 мая 2019

Это может быть проблема маскирующей функции из plyr (функции summarise/mutate также есть в plyr).Мы можем явно указать summarise из dplyr

library(dplyr)
df %>% 
    group_by(string) %>%
    dplyr::summarise(numeric = sum(numeric))
0 голосов
/ 08 мая 2019

Вы можете сделать это без загрузки дополнительных пакетов, используя tapply или aggregate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...