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

如何在R语言中对数据框中分散的多列执行相同操作?

R语言循环处理指定格式列的方法

我是R语言初学者,手里有个600多列的数据框,需要对所有命名格式为Col_x_1、Col_x_2……Col_x_56的列做两个操作:

  1. 移除单元格值中空格后面的所有字符串
  2. 将这些列转换为dbl(双精度数值)类型
    想用循环来实现,该怎么做?

示例数据

# 构造示例数据框
df <- data.frame(
  Name = c("asd", "kfj", "ale"),
  Col_x_1 = c("4 Col", "5 Cols", "0"),
  Company = c("Test", "Test_2", "Test_3"),
  Col_x_2 = c("2 Col", "10 Col", "11 Cols"),
  Start_Year = c(1902, 1933, 1988),
  End_Year = c(1933, 1954, 1999),
  Col_x_3 = c("1 Col", "0", "5 Col"),
  stringsAsFactors = FALSE
)

实现方案

步骤说明

  1. 先通过正则表达式筛选出所有符合Col_x_数字格式的目标列
  2. 循环遍历这些列,依次完成字符串截取和类型转换

代码实现

# 1. 筛选目标列:匹配所有Col_x_开头+数字结尾的列名
target_cols <- grep("^Col_x_\\d+$", colnames(df), value = TRUE)

# 2. 循环处理每一列
for(col in target_cols) {
  # 截取空格前的内容:如果没有空格则保留原字符串
  df[[col]] <- sub("\\s.*", "", df[[col]])
  # 转换为双精度数值类型
  df[[col]] <- as.double(df[[col]])
}

代码解释

  • grep("^Col_x_\\d+$", colnames(df), value = TRUE):用正则精准匹配列名,^限定开头、\\d+匹配1个及以上数字、$限定结尾,确保只选中Col_x_1到Col_x_56这类列
  • sub("\\s.*", "", df[[col]]):sub函数替换掉第一个空格及后续所有内容,\\s匹配空格、.*匹配任意字符到末尾
  • as.double(df[[col]]):把处理后的字符串转为双精度数值类型

处理后结果

print(df)
#>   Name Col_x_1 Company Col_x_2 Start_Year End_Year Col_x_3
#> 1  asd       4    Test       2       1902     1933       1
#> 2  kfj       5  Test_2      10       1933     1954       0
#> 3  ale       0  Test_3      11       1988     1999       5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:01:05