Reputation: 8247
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
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