Mar*_*ius 4 r list matrix coercion
我有一个向量,以及一个只有一列的数据框,其中包含长度不均匀的列表:
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))
Run Code Online (Sandbox Code Playgroud)
我想将其转换为矩阵,用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
Run Code Online (Sandbox Code Playgroud)
最终,甚至摆脱只有NAs. 我试过了
data = sapply(data[,1], FUN=unlist)
Run Code Online (Sandbox Code Playgroud)
进而
data = sapply(data, '[', seq(max(sapply(data, length))))
Run Code Online (Sandbox Code Playgroud)
但我一直得到一个矩阵,其中所有元素都没有列在一个列中。请指教。
我猜“数据”应该是 alist而不是 a vector,然后代码就可以工作了
t(sapply(data, `length<-`, max(lengths(data))))
Run Code Online (Sandbox Code Playgroud)
注意: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))
Run Code Online (Sandbox Code Playgroud)