I have a data frame:
df <- data.frame(
id = c(1, 2, 3),
`1` = c("W4", "W5", 49),
`2` = c("L", "O1", "P6"),
`3` = c(1, 2, 10),
`4` = c("H7", NA, "K"),
`5` = c("J8", NA, NA)
)
How can I concatenate/paste the columns together with sep = ","
(The opposite of tidyr::separate(), I guess?)
Desired output:
id string
1 W4, L, 1, H7, J8
2 W5, O1, 2
3 49, P6, 10, K
Thanks in advance!
EDIT
I'm wary of using paste
because in my real dataset I have 1000 columns.
The opposite of separate is unite .
How do I concatenate two columns in R? To concatenate two columns you can use the <code>paste()</code> function. For example, if you want to combine the two columns A and B in the dataframe df you can use the following code: <code>df['AB'] <- paste(df$A, df$B)</code>.
To split a column into multiple columns in the R Language, we use the separator() function of the dplyr package library. The separate() function separates a character column into multiple columns with a regular expression or numeric locations.
tidyr is new package that makes it easy to “tidy” your data. Tidy data is data that's easy to work with: it's easy to munge (with dplyr), visualise (with ggplot2 or ggvis) and model (with R's hundreds of modelling packages). The two most important properties of tidy data are: Each column is a variable.
You can use the unite
function from tidyr
:
library(tidyr)
unite(df, string, X1:X5, sep = ", ")
# id string
#1 1 W4, L, 1, H7, J8
#2 2 W5, O1, 2, NA, NA
#3 3 49, P6, 10, K, NA
Note that it also has a remove
argument that is TRUE
by default. If you set it to FALSE
, the original columns are kept in the data.
For the column specification (which columns to unite) you can use the colon operator (:
) as I did above or use the special functions described in ?dplyr::select
.
We can do this in base R
without any packages
data.frame(id = df[1], string= do.call(paste, c(df[-1], sep=",")))
# id string
#1 1 W4,L,1,H7,J8
#2 2 W5,O1,2,NA,NA
#3 3 49,P6,10,K,NA
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With