添加特定行以使用R dplyr创建新行

时间:2018-08-24 16:54:56

标签: r dplyr

我正在尝试添加新行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 :(得分: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"))

答案 1 :(得分:0)

由于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:我已经使用了answer,但是我做不到相同的事情,即在制作.$时删除May之前的Junsum