0

我正在尝试添加一个新行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

4

2 回答 2

0

只需使用 dplyr,您就可以使用bind_rows向 data.frame 添加一行。在这种情况下,一个summarise语句的结果。因为汇总的结果是带有列名的 data.frame,所以列将被添加到正确的位置,而 Metric_name 的值为空。如果它具有 NA 值,我们将填充值 Total。

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"))
于 2018-08-24T18:47:13.447 回答
0

这不是绝对dplyr的风格,因为rbinds,我认为有更好的方法,但这是一个解决方案

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:我已经使用了那个答案,但我不能做同样的事情,即在我制作s.$之前MayJun当我删除sum

于 2018-08-24T18:56:29.870 回答