2016-08-24 81 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