如何在R tidyverse中为数据框添加含自身名称的列?
解决方法:为数据框添加包含自身名称的列
你的代码之所以得到点号,是因为在magrittr管道中,.代表的是当前传递的数据框对象,而非原始变量名iris,所以deparse(substitute(.))解析出来的就是字符串"."。以下是几种可行的解决方式:
1. 直接指定名称(适合单个数据框)
如果只是处理单个数据框,直接在mutate里写死名称即可:
data(iris) iris %>% mutate(df = "iris")
2. 封装成函数(适合重复调用或批量处理)
如果需要给多个数据框添加名称列,封装成函数更灵活,函数内部可以通过deparse(substitute(df))获取传入的变量名:
library(dplyr) add_df_name <- function(df) { df_name <- deparse(substitute(df)) df %>% mutate(df = df_name) } # 调用函数 add_df_name(iris)
3. 批量处理多个数据框(结合purrr)
如果要合并多个数据框,推荐把数据框放进命名列表,用purrr::imap遍历,直接获取列表的名称作为列值,最后合并:
library(dplyr) library(purrr) # 构建命名数据框列表 dfs_list <- list(iris = iris, mtcars = mtcars) # 遍历添加名称列并合并 combined_data <- imap(dfs_list, ~ .x %>% mutate(df = .y)) %>% bind_rows()
内容的提问来源于stack exchange,提问作者Tom Wagstaff
相关产品推荐
相关产品推荐

