dplyr pipes - How to change the original dataframe

后端 未结 1 1435
暖寄归人
暖寄归人 2021-01-04 08:59

When I don\'t use a pipe, I can change the original daframe using this command

df<-slice(df,-c(1:3))%>% # delete top 3 rows
df<-select(df,-c(Col1,Co         


        
相关标签:
1条回答
  • 2021-01-04 09:55

    You can definitely do the assignment by using an idiom such as df <- df %>% ... or df %>% ... -> df. But you could also avoid redundancy (i.e., stating df twice) by using the magrittr compound assignment operator %<>% at the beginning of the pipe.

    From the magrittr vignette:

    The compound assignment pipe operator %<>% can be used as the first pipe in a chain. The effect will be that the result of the pipeline is assigned to the left-hand side object, rather than returning the result as usual.

    So with your code, we can do

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

    This pipes df into the expression and updates df as the result.

    Update: In the comments you note an issue setting the column names. Fortunately magrittr has provided functions for setting attributes in a pipe. Try the following.

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

    Note that since we have a data frame, we can also use setNames() (stats) or set_names() (magrittr) in place of set_colnames().


    Thanks to Steven Beaupre for adding the note from the vignette.

    0 讨论(0)
提交回复
热议问题