Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How can I mutate across all columns of a dataframe using a function like separate that seems to be expecting a dataframe instead of a vector?

I have a dataframe where I would like to separate each column into two columns. Each column follow the same pattern "x_y"


test <- structure(list(A = c("511686_0.112", "503316_0.105", "476729_0.148", 
"229348_0.181", "385774_0.178", "209277_0.029", "299921_0.124", 
"486771_0.123", "524146_0.07", "496030_0.119"), B = c("363323_0.103", 
"260709_0.105", "361361_0.148", "731426_0.181", "222799_0.178", 
"140296_0.029", "388191_0.124", "500136_0.123", "487344_0.07", 
"267303_0.119"), C = c("362981_0.103", "260261_0.105", "360912_0.148", 
"730423_0.181", "222351_0.178", "139847_0.029", "379717_0.124", 
"499662_0.123", "486869_0.07", "266907_0.119")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -10L))




Using the separate functions seems to work well for one column. How can I apply this same function to each of the columns?


# works

test2 <- test %>%
  separate_wider_delim(A, delim = "_", names_sep = "_")


> test2
# A tibble: 10 × 4
   A_1    A_2   B            C           
   <chr>  <chr> <chr>        <chr>       
 1 511686 0.112 363323_0.103 362981_0.103
 2 503316 0.105 260709_0.105 260261_0.105
 3 476729 0.148 361361_0.148 360912_0.148
 4 229348 0.181 731426_0.181 730423_0.181
 5 385774 0.178 222799_0.178 222351_0.178
 6 209277 0.029 140296_0.029 139847_0.029
 7 299921 0.124 388191_0.124 379717_0.124
 8 486771 0.123 500136_0.123 499662_0.123
 9 524146 0.07  487344_0.07  486869_0.07 
10 496030 0.119 267303_0.119 266907_0.119



# doesn't work


test3 <- test %>%
  mutate(across(everything(), separate_wider_delim, delim = "_", names_sep = "_"))


Error in `mutate()`:
ℹ In argument: `across(everything(), separate_wider_delim, delim = "_", names_sep = "_")`.
Caused by error in `across()`:
! Can't compute column `A`.
Caused by error in `fn()`:
! `data` must be a data frame, not a character vector.
Run `rlang::last_error()` to see where the error occurred.


MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

For specific columns why not simply:

test2 <- test %>%
  separate_wider_delim(cols = A:C,delim = '_', names_sep = '_')
test2

Or to expand to all columns in a dataframe:

test2 <- test %>%
  separate_wider_delim(cols = everything(),delim = '_', names_sep = '_')
test2
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading