R 具有可变行长的数据帧向量
给定一个向量,我想用一个“key”值将它转换成一个数据帧,该值随机分布在向量的一行开头。在这种情况下,z将是每列中的第一个值R 具有可变行长的数据帧向量,r,R,给定一个向量,我想用一个“key”值将它转换成一个数据帧,该值随机分布在向量的一行开头。在这种情况下,z将是每列中的第一个值 vd <- c("z","a","b","c","z","a","b","c","z","a","b","c","d") 一种解决方案是找到向量中“关键点”之间的最大距离,然后在“部分”末尾插入小于最长“部分”的空白值,以便使用矩阵 最好的方法是什么 plyr::ldply(split(vd, cumsum(vd == "z")), rbind)[-1] 抄袭
vd <- c("z","a","b","c","z","a","b","c","z","a","b","c","d")
一种解决方案是找到向量中“关键点”之间的最大距离,然后在“部分”末尾插入小于最长“部分”的空白值,以便使用矩阵
最好的方法是什么
plyr::ldply(split(vd, cumsum(vd == "z")), rbind)[-1]
抄袭
结果:
1 2 3 4 5
1 z a b c <NA>
2 z a b c <NA>
3 z a b c d
我们可以使用cumsum来确定组,然后将它们拆分。然后我们附加向量并将其格式化为data.frame
你说的钥匙是什么意思?欢迎来到SO。在你的问题标题中,你要求“向量到矩阵”,但你说你想把“它转换成数据帧”。。。此外,您的代码会生成一个非常不可读的数据帧。作为一个建议,我会给我的专栏命名,并使用NA而不是@smanski,我猜OP在他的例子中的意思是“z”。这就是向量的划分方式。这是正确的吗,OP?您的问题在这里有点不清楚,这是对我们的测试logic@WCRN NR-DA有趣的名称:您确定要在data.frame上使用转置吗?这将返回一个listread.tabletext=gsub z\n,PastVD,collapse=,fill=t ICE catch发现另一个问题您应该添加库callI真的很惊讶看到这一点-另一个问题是今天早些时候问的,起初我认为是同一个人问了两次他们的问题。。。
1 2 3 4 5
1 z a b c <NA>
2 z a b c <NA>
3 z a b c d
x <- split(vd,cumsum("z"==vd))
maxl <- max(lengths(x))
as.data.frame(lapply(x,function(y) c(y,rep(NA,maxl-length(y)))))
# X1 X2 X3
# 1 z z z
# 2 a a a
# 3 b b b
# 4 c c c
# 5 <NA> <NA> d