2012-07-06 75 views
3

我有一些由「」分隔的數據字符串需要拆分成列。是否有一種簡單的方法可以按每個第n個分隔符分割數據。例如,x中的第一個值告訴您,y中的前4個值對應於第一次試驗。 x中的第二個值告訴你,y中的下3個值對應於第二次試驗,依此類推。由可變分隔符strsplit

x <- c("4 3 3", "3 3 3 2 3") 
y <- c("110 88 77 66 55 44 33 22 33 44 11 22 11", "44 55 66 33 22 11 22 33 44 55 66 77 88 66 77 88") 

的目標是這樣的:

structure(list(session = 1:2, trial.1 = structure(1:2, .Label = c("110 88 77", 
"44 55 66"), class = "factor"), trial.2 = structure(c(2L, 1L), .Label = c("33 22 11", 
"66 55 44"), class = "factor"), trial.3 = structure(1:2, .Label = c("22 33 44", 
"23 33 44"), class = "factor"), trial.4 = structure(c(NA, 1L), .Label = "55 66", class = "factor"), 
    trial.5 = structure(c(NA, 1L), .Label = "77 88 66", class = "factor")), .Names = c("session", 
"trial.1", "trial.2", "trial.3", "trial.4", "trial.5"), class = "data.frame", row.names = c(NA, 
-2L)) 

理想的情況下,與y無需任何額外的價值,從得到的數據幀被丟棄,並且不平坦排的長度應充滿NA的。

+1

'strsplit(Y「,「)'然後用x元素的所得物的選擇結構,然後添加你自己的空間。 – 2012-07-06 22:12:55

+0

你的意思是手動做嗎?我應該提到這是我真實數據的簡化版本。 – Jose 2012-07-06 22:51:12

+0

您的結構陳述對我來說似乎很奇怪,您是否有一個特殊的R程序,您希望在清洗後運行,如果您不這樣做,我會建議與您建議的結構完全不同的結構。 – Seth 2012-07-07 00:53:19

回答

3

這可能是有用的

dumx<-strsplit(x,' ') 
dumy<-strsplit(y,' ') 
dumx<-lapply(dumx,function(x)(cumsum(as.numeric(x)))) 
dumx<-lapply(dumx,function(x){mapply(seq,c(1,x+1)[-(length(x)+1)],x,SIMPLIFY=FALSE)}) 
ans<-mapply(function(x,y){lapply(x,function(w,z){z[w]},z=y)},dumx,dumy) 

我會離開你所得到的列表轉換爲數據幀:)

+0

啊!奇蹟般有效。謝謝! – Jose 2012-07-07 01:37:53

+0

當dumx中的每個值都相同時,爲什麼此代碼不起作用的任何原因? – Jose 2012-07-23 22:51:16

+0

啊,我明白了。我應該更好地熟悉自己的行爲 – Jose 2012-07-23 23:24:59