2017-09-21 32 views
1

我在为r的以下数据帧如何打破不同行逗号分隔值r中

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

我想要的数据帧将

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

我能值在不同的分离行,但我怎样才能改变names列所需

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

非常接近的重复https://stackoverflow.com/questions/13773770/split-comma-分隔列分隔行 – thelatemail

回答

2

我们可以用separate_rows

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

或者创建一个由组中的序列列,然后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) 
+0

我只想逗号分隔在不同的行中。上面的代码也打破了由空格分隔的单元格。我怎么能编号'abc_1,abc_2',如果它有两个逗号分隔的条目 – Neil

+1

我通过'seperate_rows(d1,sep =“,”)' – Neil

+0

得到它我怎样才能实现在不同行中分隔的行被命名为'abc_1,abc_2'? – Neil