r - 使用列表中数据框名称的文本创建新列
问题描述
我正在尝试编写一个函数,该函数将根据每个数据框的名称向特定列表中的所有数据框添加新列。当我在一个列表上对其进行测试时,我的代码可以正常工作,但我无法将其转换为函数然后应用于列表中的所有数据框。我是 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)
这会添加列,但列中的数据为空白或不正确。如何让它使用数据框的名称?
解决方案
您尚未共享可重现的示例来测试这一点,但您可以迭代列表的名称或其索引。所以尝试类似的东西:
bulkTCRlist3 <- lapply(names(bulkTCRlist2),bulkTCRname)
在哪里bulkTCRname
获取您可以使用的数据框[[
:
bulkTCRname <- function(df_name) {
bulkTCRlist2[[df_name]]
#Add your code here
}
如果您传递索引,同样也应该有效
bulkTCRlist3 <- lapply(seq_along(bulkTCRlist2),bulkTCRname)
推荐阅读
- javascript - 如何在 $sceProvider 被禁用的情况下在 Angular 中利用 XSS
- node.js - Node.js - 错误:套接字挂起
- javascript - 如何删除数组中具有相同键值对的对象
- cvxpy - python模块的递归自动重载
- node.js - JSDoc:适用于孙子类的文档泛型类型
- sql - 如何使用 SQL DISTINCT 从多个列中删除重复项?
- php - php7 从数组中获取特定值
- azure-active-directory - B2B 访客邀请失败并出现 503 错误
- bar-chart - 在 spotfire 中使用按钮限制数据
- ios - 如何显示搜索结果,如 iOS“联系人”应用