2016-08-24 77 views
0

我遇到了这个问题。基于字符串重复行并替换新行的值

df <- data.frame(number=1:3,name=c('a','b','c'),code=c("5464","5463,5678","45363,6346,6435")) 

如果第3列只有一组数字,请不要重复。对于那些具有> 1组数字的行,重复该行并用随后的数字替换。

原始输出

number name code 
    1  a  "5464" 
    2  b  "5463,5678" 
    3  c  "45363,6346,6435" 

所需的输出

number name code 
    1  a "5464" 
    2  b "5463" 
    2  b "5678" 
    3  c "45363" 
    3  c "6346" 
    3  c "6435" 

我真的不知道从哪里开始。我尝试使用stringr::str_split_fixed来分隔字符串并计算出现次数。但之后,我很难根据这些事件重复行并替换相应的值。

任何帮助表示赞赏。

回答

2

我们可以使用separate_rowstidyr

library(tidyr) 
separate_rows(df, code) 

或者cSplitsplitstackshape

library(splitstackshape) 
cSplit(df, "code", ",", "long") 
+0

第二个能正常工作!根据R文档,第一个函数似乎不存在。 – cimentadaj

+0

@ user3617958它是在新的tidyr版本,即0.6.0。这对我来说可以。你有什么版本的tidyr。 – akrun

+0

是的,我正在使用0.4.1。一定是那个。 – cimentadaj