dplyr管道 - 如何更改原始数据帧

时间:2015-10-25 22:04:46

标签: r dplyr data-cleaning

当我不使用管道时,我可以使用此命令更改原始daframe

df<-slice(df,-c(1:3))%>% # delete top 3 rows
df<-select(df,-c(Col1,Col50,Col51)) # delete specific columns

如何使用管道做到这一点?我试过这个,但sliceselect函数不会更改原始数据框。

df%>%
  slice(-c(1:3))%>% 
  select(-c(Col1,Col50,Col51))

我想改变原来的df。

1 个答案:

答案 0 :(得分:13)

您绝对可以使用df <- df %>% ...df %>% ... -> df等惯用语来完成作业。但您也可以通过在管道开头使用df复合赋值运算符magrittr来避免冗余(即,说明%<>%两次)。

来自magrittr小插曲:

  

复合赋值管道运算符%<>%可用作链中的第一个管道。结果是管道的结果被分配给左侧对象,而不是像往常一样返回结果。

因此,使用您的代码,我们可以

library(magrittr)  ## came with your dplyr install
df %<>% slice(-(1:3)) %>% select(-c(Col1, Col50, Col51))

df传递到表达式中,并将df更新为结果。

更新:在评论中,您注意到设置列名称时出现问题。幸运的是,magrittr提供了在管道中设置属性的功能。请尝试以下方法。

df %<>% 
    set_colnames(sprintf("Col%d", 1:ncol(.))) %>% 
    slice(-(1:3)) %>%
    select(-c(Col1,Col50,Col51))

请注意,由于我们有数据框,因此我们也可以使用setNames()(统计信息)或set_names()(magrittr)代替set_colnames()

感谢Steven Beaupre添加了插图中的注释。