Neil
Neil

Reputation: 8247

How to break comma-separated values in different rows in r

I have a following dataframe in r

  names       values
   abc          34
   def          12,23
   rty          34,67,89

My desired dataframe would be

   names       values
   abc          34
   def_1        12
   def_2        23
   rty_1        34
   rty_2        67
   rty_3        89 

I am able to separate the values in different rows but how can I alter the names column as desired

   splitdat <- do.call("rbind", strsplit(df$values[3], ","))
   splitdat <- data.frame(apply(splitdat, 2, as.numeric))
   colnames(splitdat)[1] <- "column1" 

Upvotes: 1

Views: 955

Answers (1)

akrun
akrun

Reputation: 886948

We can use separate_rows

library(dplyr)
library(tidyr)
separate_rows(df1, values, sep=",") %>%
      mutate(names = make.unique(names, sep="_"))

Or we create a sequence column by group and then paste

separate_rows(df1, values, sep=",") %>% 
       group_by(names) %>%
       mutate(names1 = if(n()>1) paste(names, row_number(), sep="_") else names) %>%
       ungroup() %>%
       select(names1, values) %>% 
       rename(names= names1)

Upvotes: 3

Related Questions