给定一个向量,我想使用'key'值将其转换为数据帧,该值在行的开头随机分布在整个向量中。在这种情况下,“z”将是每列中的第一个值。
vd <- c("z","a","b","c","z","a","b","c","z","a","b","c","d")
结果数据应如下所示:
#using magrittr
data.frame(x1 = c("z","a","b","c", NA), x2 = c("z","a","b","c", NA), x3 = c("z","a","b","c","d"))
%>% transpose()
一种解决方案是找到向量中“键”之间的最大距离,然后在“部分”末尾插入小于最长“部分”的空白值,这样就可以使用matrix()
< / p>
最好的方法是什么?
答案 0 :(得分:3)
plyr::ldply(split(vd, cumsum(vd == "z")), rbind)[-1]
(从here复制)
结果:
1 2 3 4 5
1 z a b c <NA>
2 z a b c <NA>
3 z a b c d
答案 1 :(得分:0)
我们可以使用cumsum
来识别群组,然后将其拆分。然后我们追加向量并将它们格式化为data.frame
。
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