使用不相等的列绑定列表

时间:2014-05-31 08:28:57

标签: r

在关于数据绑定列表的无数SO贡献之后,我很尴尬地问这个问题。但是,我似乎无法在SO上找到并自己提出正确的解决方案。

我的列表看起来像这样:

[[1]]
          223586            <NA> 
       "James J." "Adress xxxxx" 

[[2]]
         12693738           <NA>         <NA> 
     "Oliver M." "Address yyyyy" "Town xxxxx"

我想得到的是:缺少NA

                          <NA>       <NA>
         James J. Adress xxxxx       NA
         Oliver M. Address yyyyy town xxxx   

我在这个案例中得到了名为(first column entry) James J.的最后一栏(长度2):

  do.call(rbind.data.frame, list)

             NA         NA        NA  
         James J. Adress xxxxx   James J.
         Oliver M. Address yyyyy town xxxx 

编辑:这些数据没有什么特别之处。它更多的是如何绑定列表中不等长的数据。长度为lapply(list, function(x) length(x))的长度为2或3个字符串。

所以我想用length 2替换丢失的NA,以便列表可以绑定。

1 个答案:

答案 0 :(得分:2)

您的问题的答案可以在右侧的this related question中找到。如果要更改列表元素以使它们的长度相同,则可以执行以下操作:

lst <- list(a = 1:3, b = 1:4, name = c("A", "X"))  #a list for the example

n <- max(unlist(lapply(lst, length)))              #check maximum length

lstnew <- lapply(lst, function(x) {ans <- rep(NA, length=n); 
                                   ans[1:length(x)]<- x; 
                                   return(ans)})   #Add NA for elements shorter than n

然后将您的列表转换为您需要的任何内容。或者,更短,你可以使用sapply:

sapply(lst,'[',1:n)         #to return a matrix

或者如果您需要data.frame

as.data.frame(sapply(lst,'[',1:n))

as.data.frame(lapply(lst,'[',1:n))