如何将字符串列表转换为数据框?

4
我希望将字符串列表转换成数据框。 给定结构:
lst <- list(NULL, "PSYC", c("PSYC", "PHIL"), "PHIL")

我想生成一个数据框

      Index     major_cd
       1            NULL
       2            PSYC
       3            PSYC
       3            PHIL
       4            PHIL

请注意,列表中的第3项变成了数据框的2行。

1
您可能需要将NULL替换为字符“NULL”或其他内容以获得所需的输出。 - akrun
1
考虑到akrun的评论,您也可以使用基本R执行一些丑陋的操作,例如cbind.data.frame(Index = rep(seq(length(l)), lapply(l, length)), major_cd = unlist(l)) - David Arenburg
1个回答

6
我们可以用"NA"或"NULL"来替换'lst'中的空元素,并在设置'lst'的名称后,使用tidyr中的unnest函数。
lst[sapply(lst, is.null)] <- NA

如评论中@David Arenburg所提到的,将其设置为"NULL"而不是NA将会产生预期的输出结果,示例如下:

library(tidyr)
unnest(setNames(lst, seq_along(lst)), Index)
#  Index    x
#1     1 <NA>
#2     2 PSYC
#3     3 PSYC
#4     3 PHIL
#5     4 PHIL

1
或者在基础R中,stack(setNames(lapply(lst, function(x) replace(x, is.null(x), NA)), seq_along(lst))) - A5C1D2H2I1M1N2O1R2T1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接