如何在R语言中对数据框中分散的多列执行相同操作?
R语言循环处理指定格式列的方法
我是R语言初学者,手里有个600多列的数据框,需要对所有命名格式为Col_x_1、Col_x_2……Col_x_56的列做两个操作:
- 移除单元格值中空格后面的所有字符串
- 将这些列转换为
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 )
实现方案
步骤说明
- 先通过正则表达式筛选出所有符合
Col_x_数字格式的目标列 - 循环遍历这些列,依次完成字符串截取和类型转换
代码实现
# 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
相关产品推荐
相关产品推荐

