Добавьте определенные строки, чтобы создать новую строку, используя R dplyr - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь добавить новую строку Total, которая будет равна apples+bananas+oranges

      Metric_name         May      Jun 
1       apples             11       34       
2       bananas            632      640      
3       onions             479      503      
4       oranges            910      939    

Как я могу сделать это с помощью dplyr

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Это не абсолютный dplyr Ситл из-за rbind с, и я думаю, что есть лучшие способы, но это решение

df %>% 
  filter(Metric_name %in% c("apples", "bananas", "oranges")) %>% 
  rbind( c("Total", sum(.$May), sum(.$Jun)) ) %>% 
  filter(Metric_name == "Total") %>% 
  rbind(df, .)

# A tibble: 5 x 3
  Metric_name May   Jun  
  <chr>       <chr> <chr>   
1 apples      11    34   
2 bananas     632   640  
3 onions      479   503  
4 oranges     910   939  
5 Total       1553  1613 

PS: я использовал этот ответ , но я не могу сделать то же самое, то есть удалить .$ до May и Jun, когда я сделаю sum s

0 голосов
/ 24 августа 2018

Просто используя dplyr, вы можете использовать bind_rows, чтобы добавить строку в data.frame. В этом случае результат оператора summarise. Поскольку результатом суммирования является data.frame с именами столбцов, столбцы будут добавлены в правильном месте и пустое значение для Metric_name. Это мы заполняем значением Total, если оно имеет значение NA.

df1 %>% 
  bind_rows(df1 %>% 
            filter(Metric_name %in% c("apples","bananas","oranges")) %>% 
            summarise_if(is.numeric, funs(sum))) %>% 
  mutate(Metric_name = ifelse(is.na(Metric_name), "Total", Metric_name))

  Metric_name  May  Jun
1      apples   11   34
2     bananas  632  640
3      onions  479  503
4     oranges  910  939
5       Total 1553 1613

данные:

df1 <- structure(list(Metric_name = c("apples", "bananas", "onions", 
"oranges"), May = c(11L, 632L, 479L, 910L), Jun = c(34L, 640L, 
503L, 939L)), class = "data.frame", row.names = c("1", "2", "3", 
"4"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...