首页 > 解决方案 > 使用列表中数据框名称的文本创建新列

问题描述

我正在尝试编写一个函数,该函数将根据每个数据框的名称向特定列表中的所有数据框添加新列。当我在一个列表上对其进行测试时,我的代码可以正常工作,但我无法将其转换为函数然后应用于列表中的所有数据框。我是 R 新手,所以除了显示我的代码之外,我无法想出一个更简单的版本。

下面是我的代码,适用于列表中的一个数据框。在此代码中,bulkTCRlist2 是我的列表的名称,其中 Sbj_05_2016_d0_active_bk.tsv 是列表中的一个数据框。

bulkTCRlist2$Sbj_05_2016_d0_active_bk.tsv <- mutate(bulkTCRlist2$Sbj_05_2016_d0_active_bk.tsv,subject=
       substr(deparse(substitute(Sbj_05_2016_d0_active_bk.tsv)),1,6),
     bulkTCRlist2$Sbj_05_2016_d0_active_bk.tsv,year=
       substr(deparse(substitute(Sbj_05_2016_d0_active_bk.tsv)),8,11),
     bulkTCRlist2$Sbj_05_2016_d0_active_bk.tsv,day=
       substr(deparse(substitute(Sbj_05_2016_d0_active_bk.tsv)),13,14),
     bulkTCRlist2$Sbj_05_2016_d0_active_bk.tsv,state=
       substr(deparse(substitute(Sbj_05_2016_d0_active_bk.tsv)),16,18),
     bulkTCRlist2$Sbj_05_2016_d0_active_bk.tsv,sort=
       substr(deparse(substitute(Sbj_05_2016_d0_active_bk.tsv)),23,24))

我用来尝试将其转换为函数的代码如下。

bulkTCRname <- function(df){bulkTCRlist3 <- df %>%  mutate(df,subject=
       substr(deparse(substitute(list(df))),1,6),
     df,year=
       substr(deparse(substitute(df)),8,11),
     df,day=
       substr(deparse(substitute(df)),13,14),
     df,state=
       substr(deparse(substitute(df)),16,18),
     df,sort=
       substr(deparse(substitute(df)),23,24))bulkTCRlist3}

bulkTCRlist3 <- lapply(bulkTCRlist2,bulkTCRname)

这会添加列,但列中的数据为空白或不正确。如何让它使用数据框的名称?

标签: r

解决方案


您尚未共享可重现的示例来测试这一点,但您可以迭代列表的名称或其索引。所以尝试类似的东西:

bulkTCRlist3 <- lapply(names(bulkTCRlist2),bulkTCRname)

在哪里bulkTCRname获取您可以使用的数据框[[

bulkTCRname <- function(df_name) {
       bulkTCRlist2[[df_name]]
       #Add your code here
}

如果您传递索引,同样也应该有效

bulkTCRlist3 <- lapply(seq_along(bulkTCRlist2),bulkTCRname)

推荐阅读