在关于数据绑定列表的无数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
,以便列表可以绑定。
答案 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))