簡體   English   中英

將不同名稱的向量列表轉換為R中具有唯一列名的數據框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM