Sil*_*bow 9 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
Run Code Online (Sandbox Code Playgroud)
如何使用管道做到这一点?我试过这个但是slice和select函数不会改变原始数据帧.
df%>%
slice(-c(1:3))%>%
select(-c(Col1,Col50,Col51))
Run Code Online (Sandbox Code Playgroud)
我想改变原来的df.
Ric*_*ven 14
你绝对可以使用诸如df <- df %>% ...或之类的成语来完成作业df %>% ... -> df.但是你也可以df通过在管道的开头使用magrittr复合赋值运算符来避免冗余(即,说两次)%<>%.
从小magrittr插图:
复合赋值管道运算符
%<>%可用作链中的第一个管道.结果是管道的结果被分配给左侧对象,而不是像往常一样返回结果.
因此,使用您的代码,我们可以做到
library(magrittr) ## came with your dplyr install
df %<>% slice(-(1:3)) %>% select(-c(Col1, Col50, Col51))
Run Code Online (Sandbox Code Playgroud)
这将df导入表达式并df作为结果进行更新.
更新: 在注释中您注意到设置列名称的问题.幸运的是,magrittr它提供了在管道中设置属性的功能.请尝试以下方法.
df %<>%
set_colnames(sprintf("Col%d", 1:ncol(.))) %>%
slice(-(1:3)) %>%
select(-c(Col1,Col50,Col51))
Run Code Online (Sandbox Code Playgroud)
请注意,由于我们有数据框,我们也可以使用setNames()(stats)或set_names()(magrittr)代替set_colnames().
感谢Steven Beaupre添加了小插图中的注释.