You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何为多个dataframe添加等于其名称末位数字的survey变量

你可以通过将所有目标数据框存入列表批量处理,这是R中处理多同结构数据框的最优方案,以下是可直接运行的代码:

# 示例数据
yng1 <- as.data.frame(c(1:4))
yng2 <- as.data.frame(c(5:8))

方法1:tidyverse 实现(代码更简洁)

library(purrr)
library(stringr)
library(dplyr)

# 1. 抓取全局环境中所有yng+数字命名的数据框,存入列表
df_list <- mget(ls(pattern = "^yng\\d+$"))

# 2. 批量为每个数据框添加survey列:取值为对应名称最后一位的数字
df_list <- imap(df_list, ~ mutate(.x, survey = as.integer(str_extract(.y, "\\d$"))))

# 3. (可选)将处理后的所有数据框放回全局环境,覆盖原有对象
list2env(df_list, envir = .GlobalEnv)

方法2:base R 实现(无需加载额外包)

之前for循环失败通常是因为直接遍历字符串类型的对象名,没有通过get()获取对应对象、assign()回写结果导致的,以下循环方法已经规避了这个问题:

# 1. 匹配所有目标数据框名称
df_names <- ls(pattern = "^yng\\d+$")

# 2. 循环处理每个数据框
for (name in df_names) {
  # 获取当前数据框
  df <- get(name)
  # 提取名称最后一位数字作为survey值
  df$survey <- as.integer(substr(name, nchar(name), nchar(name)))
  # 赋值回全局环境
  assign(name, df)
}

适配说明

如果你的数据框命名是yng+多位数(如yng10、yng11),只需调整数字提取规则即可:

  • tidyverse版本将str_extract(.y, "\\d$")改为str_extract(.y, "(?<=yng)\\d+")
  • base R版本将substr(name, nchar(name), nchar(name))改为sub("yng", "", name)

运行上述代码后,查看yng1、yng2即可得到预期输出。

内容的提问来源于stack exchange,提问作者Bicep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:06:04