将长度不均匀的列表向量转换为矩阵

问题描述 投票:3回答:1

我有一个向量,一个只有一列的数据框,包含不均匀长度的列表:

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))))

但我不断得到一个矩阵,所有元素都在一列中不列出。请指教。

r list matrix coercion
1个回答
4
投票

我猜'数据'应该是list而不是vector,那么代码可以工作

t(sapply(data, `length<-`, max(lengths(data))))

注意:lengths是一个更快的选项(在最近的R版本中引入)取代sapply(data, length)

data

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))
© www.soinside.com 2019 - 2024. All rights reserved.