我希望從不等向量串列創建一個 data.table,但我希望它用 NA 填充,而不是重復“較短”向量的值。我有一種可能的解決方案,但它會重復值并且不會根據需要保留 NA。
例子:
library(data.table)
my_list <- list(A = 1:4, B = letters[1:5])
as.data.table(do.call(cbind, my_list))
as.data.table(do.call(cbind, my_list))
A B
1: 1 a
2: 2 b
3: 3 c
4: 4 d
5: 1 e
但我希望它看起來像:
as.data.table(do.call(cbind, my_list))
A B
1: 1 a
2: 2 b
3: 3 c
4: 4 d
5: NA e
謝謝!
uj5u.com熱心網友回復:
我們需要lengths通過NA在小于長度的list元素的末尾追加來實作相同的效果lengthmax
mx <- max(lengths(my_list))
as.data.table(do.call(cbind, lapply(my_list, `length<-`, mx)))
-輸出
A B
1: 1 a
2: 2 b
3: 3 c
4: 4 d
5: <NA> e
而不是cbind/as.data.table,setDT更緊湊
setDT(lapply(my_list, `length<-`, mx))[]
A B
1: 1 a
2: 2 b
3: 3 c
4: 4 d
5: NA e
uj5u.com熱心網友回復:
您可以使用stringi::stri_list2matrix使所有串列長度相等。
my_list |>
stringi::stri_list2matrix() |>
data.table::as.data.table() |>
type.convert(as.is = TRUE) |>
setNames(names(my_list))
# A B
#1: 1 a
#2: 2 b
#3: 3 c
#4: 4 d
#5: NA e
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318517.html
