我经常在拨打lapply()电话后使用do.call("cbind.data.frame", my_list),通常我不会遇到任何问题.由于某些原因,在下面的列表中,绑定后的列名有所不同;列表号在名称之前.

我的 list 是这样的:

dput(my_list)

list(`1` = structure(list(`Pulmonary_embolism~f.20002.0` = NA, 
`Pulmonary_embolism~f.20002.1` = NA, `Pulmonary_embolism~f.20002.2` = NA, 
`Pulmonary_embolism~f.20002.3` = NA, `Pulmonary_embolism~f.20002.all` = NA), row.names = "1", class = "data.frame"), 
`2` = structure(list(`Pulmonary_embolism~f.6152.0` = NA, 
    `Pulmonary_embolism~f.6152.1` = NA, `Pulmonary_embolism~f.6152.2` = NA, 
    `Pulmonary_embolism~f.6152.3` = NA, `Pulmonary_embolism~f.6152.all` = NA), row.names = "1", class = "data.frame"))

但在do.call("cbind.data.frame", my_list)之后,变量会发生变化:

names(do.call("cbind.data.frame", my_list))

[1] "1.Pulmonary_embolism~f.20002.0"   "1.Pulmonary_embolism~f.20002.1"   "1.Pulmonary_embolism~f.20002.2"   "1.Pulmonary_embolism~f.20002.3"   "1.Pulmonary_embolism~f.20002.all"
[6] "2.Pulmonary_embolism~f.6152.0"    "2.Pulmonary_embolism~f.6152.1"    "2.Pulmonary_embolism~f.6152.2"    "2.Pulmonary_embolism~f.6152.3"    "2.Pulmonary_embolism~f.6152.all"

如何防止列表号成为列名的一部分?

推荐答案

首先,您可以使用lapplyunlist提取列名,并确保使用use.names=FALSE删除列名中的数据帧名称.之后,您可以将这些名称用于您的do.call输出,如下所示:

your_names = unlist(lapply(my_list, \(x) colnames(x)), use.names = FALSE)
df = do.call("cbind.data.frame", my_list)
names(df) = your_names
df
#>   Pulmonary_embolism~f.20002.0 Pulmonary_embolism~f.20002.1
#> 1                           NA                           NA
#>   Pulmonary_embolism~f.20002.2 Pulmonary_embolism~f.20002.3
#> 1                           NA                           NA
#>   Pulmonary_embolism~f.20002.all Pulmonary_embolism~f.6152.0
#> 1                             NA                          NA
#>   Pulmonary_embolism~f.6152.1 Pulmonary_embolism~f.6152.2
#> 1                          NA                          NA
#>   Pulmonary_embolism~f.6152.3 Pulmonary_embolism~f.6152.all
#> 1                          NA                            NA

另一种 Select 是使用dplyr中的bind_cols,这样的名称中不包含数字:

library(dplyr)

bind_cols(my_list)
#>   Pulmonary_embolism~f.20002.0 Pulmonary_embolism~f.20002.1
#> 1                           NA                           NA
#>   Pulmonary_embolism~f.20002.2 Pulmonary_embolism~f.20002.3
#> 1                           NA                           NA
#>   Pulmonary_embolism~f.20002.all Pulmonary_embolism~f.6152.0
#> 1                             NA                          NA
#>   Pulmonary_embolism~f.6152.1 Pulmonary_embolism~f.6152.2
#> 1                          NA                          NA
#>   Pulmonary_embolism~f.6152.3 Pulmonary_embolism~f.6152.all
#> 1                          NA                            NA

创建于2023-06-29,共reprex v2.0.2

R相关问答推荐

使用long()在dØr中过滤后获取元素数量

R的法国工作日

R -创建一列,指示另一列是否具有相同的值

插入指示行之间时间间隔的新行

如何以编程方式将X轴勾号上的希腊符号合并到R图中?

R -模运算后的加法

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

隐藏e_mark_line的工具提示

在R中为马赛克图中的每个字段着色

提取一个列表中单个列的重复观察结果R

当我添加美学时,geom_point未对齐

更新R中的数据表(使用data.table)

从多面条形图中删除可变部分

从多个可选列中选取一个值到一个新列中

我如何go 掉盒子图底部的数字?

如何创建累加到现有列累计和的新列?

自动STAT_SUMMARY统计与手动标准误差之间的差异

创建在文本字符串中发现两个不同关键字的实例的数据框

有没有办法将基于每个值中出现的两个关键字或短语的字符串向量重新编码为具有这两个值的新向量?

随机将数据帧中特定列上的某些行设置为NA