我在网站上看到了这个问题的几种变体,但没有发现这个特殊问题。
我创建了一个未命名的数字向量列表。每个向量的长度是变化的。例如,前几个条目可能看起来像:
data[[1]]
1 2 3
data[[2]]
1 2 3 4
data[[3]]
1 3
我正在尝试将其导出为表格格式,因此我试图将其转换为类似于以下内容的数据框:
1 2 3 NA
1 2 3 4
1 3 NA NA
我尝试了各种方法,例如do.call,rbindlist和as.data.frame。我也尝试过将数据集创建为列表列表而不是向量列表。
谢谢您的任何建议。
答案 0 :(得分:1)
使用tidyverse:
l <- list(c(1,2,3,4),c(1,2,3),c(1,3))
data.frame(x=I(l)) %>%
mutate(id=row_number()) %>%
unnest %>%
group_by(id) %>% mutate(k=paste0("V",row_number())) %>%
spread(k,x) %>% select(-id)
# V1 V2 V3 V4
# <dbl> <dbl> <dbl> <dbl>
#1 1 2 3 4
#2 1 2 3 NA
#3 1 3 NA NA
答案 1 :(得分:0)
将列表放在嵌套的数据框中。为列表中的每个向量添加行索引i
,使数据框保持嵌套。为每个向量中的每个元素赋予列索引j
,以宽格式散布数据。
library(tidyverse)
l <- list(c(1,2,3),c(1,2,3,4),c(1,3))
data_frame(data = l) %>%
mutate(i = row_number()) %>%
unnest() %>%
group_by(i) %>%
mutate(j = paste0("x", 1:n())) %>%
spread(j, data)
# A tibble: 3 x 5
# Groups: i [3]
i x1 x2 x3 x4
* <int> <dbl> <dbl> <dbl> <dbl>
1 1 1 2 3 NA
2 2 1 2 3 4
3 3 1 3 NA NA
答案 2 :(得分:0)
尼古拉(Nicola)的答案就像一个咒语,是迄今为止我所见过的最简单的答案。谢谢!
do.call(rbind,lapply(data,function(x) "length<-"(x,max(lengths(data)))))