![](/img/trans.png)
[英]R function for converting data.table to named list of named vectors
[英]Converting a list of differently named vectors into a dataframe with unique column names in R
標題比較羅,,但我找不到解決此問題的方法,因此希望盡可能具體。 有沒有一種簡單的方法可以執行以下操作:
test3 <- list('Row1'=c(a='a',b='b',c='c'), 'Row2'=c(a='d',var2='e',var3='f'))
desired dataframe
a b c var2 var3
Row1 a b c <NA> <NA>
Row2 d <NA> <NA> e f
這篇文章- https://www.r-bloggers.com/converting-a-list-to-a-data-frame/ -好像我要求可以只使用as.data.frame(TEST3),但是當我做它,我獲得:
> as.data.frame(test3)
Row1 Row2
a a d
b b e
c c f
t(as.data.frame(test3))
a b c
Row1 "a" "b" "c"
Row2 "d" "e" "f"
兩者都不對...
在此先感謝您的幫助!
這是來自data.table
rbindlist()
解決方案:
library("data.table")
test3 <- list('Row1'=c(a='a',b='b',c='c'), 'Row2'=c(a='d',var2='e',var3='f'))
rbindlist(lapply(test3, as.list), fill=TRUE)
# a b c var2 var3
# 1: a b c NA NA
# 2: d NA NA e f
列表test3
的元素被命名為字符向量-因此首先強制列表。
如果需要行名,可以執行以下操作:
result <- setDF(rbindlist(lapply(test3, as.list), fill=TRUE))
rownames(result) <- names(test3)
result
# a b c var2 var3
# Row1 a b c <NA> <NA>
# Row2 d <NA> <NA> e f
這會將data.table強制轉換為數據框,然后設置行名。
對於data.table結果,您必須為行名定義一個額外的列:
result <- rbindlist(lapply(test3, as.list), fill=TRUE)
result[, rowna := names(test3)]
result
# a b c var2 var3 rowna
# 1: a b c NA NA Row1
# 2: d NA NA e f Row2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.