2012-07-06 46 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