r - 数据框列表的不规则列表

标签 r list dataframe

有问题。
我需要将不规则的列表列表转换为宽格式的 data.frame(即我需要相同的行数),但我不知道该怎么做。
列表看起来像这样:

[[1]]
[1] 14

[[2]]
[1] 26

[[3]]
[1] 20 21 22 23

[[4]]
[1] 21 22

[[5]]
[1] 25

[[6]]
[1] 17 21 23

我已经尝试了各种使用 for 循环和/或 sapply 的方法,但没有任何效果。不同长度的列表元素破坏了我所做的任何尝试。在我看来,必须有一种相当简单的方法来做到这一点。不是应该在吗?任何人都可以建议吗?

最佳答案

这是一个 lapply/mapply例子...

#  Data
set.seed(1)
ll <- replicate( 4 , runif( sample(4,1) ) )
str(ll)
#List of 4
# $ : num [1:2] 0.372 0.573
# $ : num [1:4] 0.202 0.898 0.945 0.661
# $ : num [1:3] 0.0618 0.206 0.1766
# $ : num [1:3] 0.384 0.77 0.498

#  Find length of each list element
len <- sapply(ll,length)

#  Longest gives number of rows
n <- max( len )

#  Number of NAs to fill for column shorter than longest
len <- n - len

#  Output
mapply( function(x,y) c( x , rep( NA , y ) ) , ll , len )
#          [,1]      [,2]       [,3]      [,4]
#[1,] 0.3721239 0.2016819 0.06178627 0.3841037
#[2,] 0.5728534 0.8983897 0.20597457 0.7698414
#[3,]        NA 0.9446753 0.17655675 0.4976992
#[4,]        NA 0.6607978         NA        NA
注意,输出是一个矩阵,所以你需要用 data.frame() 包裹输出.

逐行填充并返回一个 data.frame
data.frame( t( mapply( function(x,y) c( x , rep( NA , y ) ) , ll , len ) ) )
#          X1        X2        X3        X4
#1 0.37212390 0.5728534        NA        NA
#2 0.20168193 0.8983897 0.9446753 0.6607978
#3 0.06178627 0.2059746 0.1765568        NA
#4 0.38410372 0.7698414 0.4976992        NA

关于r - 数据框列表的不规则列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21103410/

相关文章:

r - `is()` 和 `is...()` 函数的区别

r - 如何使用 R 将多列堆叠为一列

python - 如何使用来自另一个列表的 bool 值来屏蔽列表

r - 从多个数据框中子集公共(public)行

scala - 如何根据 Scala 中具有许多条目的其他数据帧中的列更新 Spark 数据帧?

regex - R 正则表达式 : http matching

r - 在 R 中向量化循环

python - 如何从数组中删除特定元素而不删除其以后出现的元素

list - 递归地将元组列表转换为列表元组

python - 如何将 pandas 数据框日期时间列转换为 int?