Tidy method to split multiple columns using tidyr::separate

后端 未结 5 1004
别跟我提以往
别跟我提以往 2021-01-14 19:08

I have a data frame like so:

df <- structure(list(A = c(\"3 of 5\", \"1 of 2\", \"1 of 3\", \"1 of 3\", 
\"3 of 4\", \"2 of 7\"), B = c(\"2 of 2\", \"2 of         


        
5条回答
  •  终归单人心
    2021-01-14 19:49

    We can use cSplit

    library(splitstackshape)
    
    df1 <- cSplit(df, names(df), sep = "of", stripWhite = FALSE)
    df1
    
    #   A_1 A_2 B_1 B_2 C_1 C_2 D_1 D_2 E_1 E_2
    #1:   3   5   2   2  10  21   0   0   8  16
    #2:   1   2   2   4   3  14   0   0   3  15
    #3:   1   3   0   1  11  34   0   0  10  32
    #4:   1   3   0   0  10  35   0   0   6  28
    #5:   3   4   0   0  16  53   0   0  13  49
    #6:   2   7   0   0  17  62   0   0   9  48
    

    We can rename it by

    names(df1) <- c(outer(names(df), c("attempted", "landed"), paste, sep = "_"))
    

    And we can always do things in base R

    do.call(cbind.data.frame, 
         lapply(df, function(x) do.call(rbind, strsplit(x, " of "))))
    
    
    #  A.1 A.2 B.1 B.2 C.1 C.2 D.1 D.2 E.1 E.2
    #1   3   5   2   2  10  21   0   0   8  16
    #2   1   2   2   4   3  14   0   0   3  15
    #3   1   3   0   1  11  34   0   0  10  32
    #4   1   3   0   0  10  35   0   0   6  28
    #5   3   4   0   0  16  53   0   0  13  49
    #6   2   7   0   0  17  62   0   0   9  48
    

    We can rename the columns in similar fashion as shown above.

提交回复
热议问题