R中data.frame的长度不同的列表列表

时间:2012-10-13 18:24:20

标签: r list dataframe

我已经阅读了很多关于将列表列表转换为df的答案。但是,我注意到它们都具有相同的列表长度(在主要大列表中)。我有一个不同的案例:

h1 <- list(USA = c(10,13,17,11), RUSSIA = NULL, BRAZIL = NULL,
  CHINA = c(11,11,10,8,12), TAIWAN = c(12,9,9,11,9,12,14), CHILE = NULL)

我想将上面的列表h1转换为data.frame。我的预期输出应该是一个包含2列的data.frame - country_name,list。像这样:

country_name, list
USA    [10, 13, 17, 11]
RUSSIA NULL
BRAZIL NULL
CHINA  [11, 11, 10, 8, 12]
TAIWAN [12, 9, 9, 11, 9, 12, 14]
CHILE  NULL

我做了以下,但是,没有工作:

do.call(rbind, h1)

它尝试在所有行中保持列号相同。我不要那个。我想知道如何使用ldply来处理这种情况。任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:3)

您可以将列表转换为矩阵,矩阵的每个元素都是一个列表。

d1 <- data.frame(country_name=names(h1), list=matrix(h1))

那就是说,我建议不要这样做,因为它不符合R范式。大多数R函数假设矩阵包含来自一种原子类型的元素。

答案 1 :(得分:2)

这是一种方式:

R> as.data.frame(as.matrix(h1))
                            V1
USA             10, 13, 17, 11
RUSSIA                    NULL
BRAZIL                    NULL
CHINA        11, 11, 10, 8, 12
TAIWAN 12, 9, 9, 11, 9, 12, 14
CHILE                     NULL

R> as.data.frame(as.matrix(h1))['TAIWAN', ]
$TAIWAN
[1] 12  9  9 11  9 12 14