r - 从 R 中的列表列名称获取值表

标签 r

要重现我的问题,请在 R 中使用此代码

list.1<-list(c(11L, 13L), c(9L, 12L, 14L, 15L, 16L, 19L, 20L, 22L, 25L), c(5L, 8L, 11L), c(10L, 11L, 13L, 14L, 16L))
names(list.1[[1]]) <- paste("name", c("2","6"), sep = "")
names(list.1[[2]]) <- paste("name", c("2","3", "5", "6", "7", "10", "14", "15", "16"), sep = "")
names(list.1[[3]]) <- paste("name", c("4","9", "16"), sep = "")
names(list.1[[4]]) <- paste("name", c("2","3", "5", "9", "12"), sep = "")

这将通过以下方式创建名称列表

[1] name2 name6 
     11    13
[2] name2  name3  name5  name6  name7 name10 name14 name15 name16 
     9     12     14     15     16     19     20     22     25 

我想以这种方式获得上面列表中的数据框

[1] name1 name2  name3  name4 name5  name6 name7 name8 name9 name10 name11 etc. to name16
      0    11     0      0      0     13    0      0     0     0      0

[2]   0    9      12     0     14     15    16     0     0     0      0

基本上,我希望拥有所有可能的名称类别(名称1-16),即使列表的每个元素中都缺少它们。

我之前的命令不起作用,但给了我一个只有缩短列表而没有缺失值的表格:

df.list1 <- as.data.frame(t(sapply(df.list1,'[',1:16))) 

这给了我所需的 16 列,但没有给我缺失的列,所以我在每行中有不同的向量长度,NA 填充剩余空间(即,它在我想要的前两列中堆叠了 name2 和 name6它们位于第二列和第六列,其他列取值为零)。

有一些 R 魔法可以做到这一点吗?

最佳答案

我们可以使用 rbindlistfill = TRUE 来创建单个 data.table,因为最好存储为单个数据集而不是列表中包含单行的多个数据集

library(data.table)
rbindlist(lapply(list.1, as.data.frame.list), fill = TRUE)

正如 @Frank 在评论中建议的那样,rbindlist 可以采用 list

rbindlist(lapply(list.1, as.list), fill=TRUE)

如果我们确实想要单独的data.frame,一种选择是根据不存在的名称创建列

lapply(list.1, function(x) {x1 <- as.data.frame.list(x)
      x1[setdiff(paste0("name", 1:16), names(x))] <- 0
      x1[paste0("name", 1:16)]})
#[[1]]
#  name1 name2 name3 name4 name5 name6 name7 name8 name9 #name10 name11 name12 name13 name14 name15 name16
#1     0    11     0     0     0    13     0     0     0      0      0      0      0      0      0      0

#[[2]]
#  name1 name2 name3 name4 name5 name6 name7 name8 name9 name10 name11 name12 name13 name14 name15 name16
#1     0     9    12     0    14    15    16     0     0     19      0      0      0     20     22     25

#[[3]]
#  name1 name2 name3 name4 name5 name6 name7 name8 name9 name10 name11 name12 name13 name14 name15 name16
#1     0     0     0     5     0     0     0     0     8      0      0      0      0      0      0     11

#[[4]]
#  name1 name2 name3 name4 name5 name6 name7 name8 name9 name10 name11 name12 name13 name14 name15 name16
#1     0    10    11     0    13     0     0     0    14      0      0     16      0      0      0      0

关于r - 从 R 中的列表列名称获取值表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43295474/

相关文章:

r - 使用线条和多因子连接 ggplot 箱线图

r - 将多列相互相乘成R中的新数据框

r - 如何使用R从需要cookie的SSL页面下载压缩文件

r - 在 R 中将 unicode 字符保存为 .pdf

mysql - RMySQL 错误地查询类型为 bit 的列

将 R 中的值替换为 NA

r - ggplot2:更改轴上因子变量的显示顺序

sql-server - 在 R 和 SQL 中计算唯一数字

使用 R 从特定列中删除字符值

r - 在 R 中传递 mongodb ISODate