8

我在 SO 中阅读了许多关于将列表转换为 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,列表。像这样的东西:

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。任何建议表示赞赏。

4

2 回答 2

5

这是一种方法:

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
于 2012-10-13T18:33:16.240 回答
4

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

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

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

于 2012-10-13T18:36:54.727 回答