矢量到具有可变行长度的数据帧

时间:2018-03-26 23:35:24

标签: r

给定一个向量,我想使用'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>

最好的方法是什么?

2 个答案:

答案 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