将长度不均匀的列表向量转换为矩阵
Convert a vector of lists with uneven length to a matrix
我有一个向量,一个只有一列的数据框,其中包含不均匀长度的列表:
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))))
但我不断得到一个矩阵,其中所有元素未列在一列中。请指教
我想 'data' 应该是 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))
我有一个向量,一个只有一列的数据框,其中包含不均匀长度的列表:
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))))
但我不断得到一个矩阵,其中所有元素未列在一列中。请指教
我想 'data' 应该是 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))