Dataframe добавляет новые строки из существующих - PullRequest
0 голосов
/ 09 февраля 2019

Мои текущие данные:

Type             Country        Score
University       Australia       10
University       Brazil          10
University       Hong Kong       10
College          Australia       10
College          Brazil          10
College          Hong Kong       10

Теперь я хочу получить сводку новых строк, созданных из вышеуказанных данных, как показано ниже.Новые строки представляют собой сумму баллов для каждого университета и колледжа в стране.

Type             Country         Score
University       Australia       10
University       Brazil          10
University       Hong Kong       10
College          Australia       10
College          Brazil          10
College          Hong Kong       10
All              Australia       20
All              Brazil          20
All              Honk Kong       20

Я знаю, что могу написать цикл для перебора данных и проверки стран, но, возможно, я могу использовать такие пакеты, какdplyr чтобы достичь того, что я хочу.

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Или в базе R вы можете сделать это с aggregate

Extra = cbind("All", aggregate(df$Score, list(df$Country), sum))
names(Extra) = names(df)
rbind(df, Extra)
        Type   Country Score
1 University Australia    10
2 University    Brazil    10
3 University Hong Kong    10
4    College Australia    10
5    College    Brazil    10
6    College Hong Kong    10
7        All Australia    20
8        All    Brazil    20
9        All Hong Kong    20
0 голосов
/ 09 февраля 2019

Другой метод с ave():

df2 <- within(df1, {Type <- "All" ; Score <- ave(Score, Country, FUN = sum)})
rbind(df1, unique(df2))

#         Type   Country Score
# 1 University Australia    10
# 2 University    Brazil    10
# 3 University Hong Kong    10
# 4    College Australia    10
# 5    College    Brazil    10
# 6    College Hong Kong    10
# 7        All Australia    20
# 8        All    Brazil    20
# 9        All Hong Kong    20
0 голосов
/ 09 февраля 2019

Нам нужно group_by 'Страна', получить sum значения 'Оценка', создать новый столбец 'Тип' с помощью 'Все' и связать строки с исходными данными

library(dplyr)
df1  %>% 
  group_by(Country) %>%
  summarise(Score = sum(Score)) %>%
  mutate(Type = "All") %>% 
  bind_rows(df1, .)
#        Type   Country Score
#1 University Australia    10
#2 University    Brazil    10
#3 University Hong Kong    10
#4    College Australia    10
#5    College    Brazil    10
#6    College Hong Kong    10
#7        All Australia    20
#8        All    Brazil    20
#9        All Hong Kong    20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...