R语言循环str_c函数批量合并对应列生成新列的问题求助
解决方案
1. 单个数据框的批量列合并
直接用for循环即可完成,核心是通过动态拼接列名实现赋值(这可能是你之前循环无效的关键——用[[ ]]而非$处理变量形式的列名):
library(stringr) # 处理fy14bx for (i in 1:100) { # 动态拼接对应列名 onset_col <- paste0("onset", i) ddx_col <- paste0("x08ddx", i) new_col <- paste0("c", i) # 合并列并赋值给新列,可按需修改sep参数添加分隔符 fy14bx[[new_col]] <- str_c(fy14bx[[onset_col]], fy14bx[[ddx_col]], sep = "") }
2. 批量处理多个数据框
如果要处理fy14bx、fy15等多个结构类似的数据框,先将它们存入列表,再批量迭代处理:
# 将需要处理的数据框统一存入列表(按需补充其他数据框) df_list <- list( fy14bx = fy14bx, fy15 = fy15, fy16 = fy16 ) # 定义单个数据框的处理函数 process_df <- function(df) { for (i in 1:100) { onset_col <- paste0("onset", i) ddx_col <- paste0("x08ddx", i) new_col <- paste0("c", i) df[[new_col]] <- str_c(df[[onset_col]], df[[ddx_col]], sep = "") } return(df) } # 批量处理列表中所有数据框 processed_df_list <- lapply(df_list, process_df) # 可选:将处理后的数据框放回全局环境 list2env(processed_df_list, envir = .GlobalEnv)
3. 可选:tidyverse风格实现
如果你习惯tidyverse语法,也可以用dplyr::across结合字符串匹配实现:
library(dplyr) library(stringr) fy14bx <- fy14bx %>% mutate( across(paste0("onset", 1:100), ~ str_c(., get(str_replace(cur_column(), "onset", "x08ddx"))), .names = "c{str_remove(cur_column(), 'onset')}") )
内容的提问来源于stack exchange,提问作者Lukasz_S
相关产品推荐
相关产品推荐

