我有一个向量,一个只有一列的数据框,包含不均匀长度的列表:
data = list(
c(349, 364, 393, 356, 357, 394, 334, 394, 343, 365, 349),
c(390, 336, 752, 377),
c(670, 757, 405, 343, 1109, 350, 372),
c(0, 0),
c(),
c(1115, 394, 327, 356, 408, 329, 385, 357, 357))
我想把它转换成矩阵,用NA
填补空白。所以看起来应该是这样的:
349, 364, 393, 356, 357, 394, 334, 394, 343, 365, 349
390, 336, 752, 377, NA, NA, NA, NA, NA, NA, NA
670, 757, 405, 343, 1109,350, 372, NA, NA, NA, NA
0, 0, NA, NA, NA, NA, NA, NA, NA, NA, NA
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
1115,394, 327, 356, 408, 329, 385, 357, 357, NA, NA
最终,甚至只用NAs
摆脱行。我试过了
data = sapply(data[,1], FUN=unlist)
然后
data = sapply(data, '[', seq(max(sapply(data, length))))
但我不断得到一个矩阵,所有元素都在一列中不列出。请指教。
我猜'数据'应该是list
而不是vector
,那么代码可以工作
t(sapply(data, `length<-`, max(lengths(data))))
注意:lengths
是一个更快的选项(在最近的R版本中引入)取代sapply(data, length)
data = list(
c(349, 364, 393, 356, 357, 394, 334, 394, 343, 365, 349),
c(390, 336, 752, 377),
c(670, 757, 405, 343, 1109, 350, 372),
c(0, 0),
numeric(0),
c(1115, 394, 327, 356, 408, 329, 385, 357, 357))