在R中为列表内各DataFrame的所有元素添加对应前缀字符串
解决方案
先构造可复现的示例数据
# 创建示例DataFrame列表 df1 <- data.frame(Feature = c("Feat1", "Feat2"), Method = c("Variant1", "Variant2"), stringsAsFactors = FALSE) df2 <- data.frame(Feature2 = c("Feat3", "Feat4", "Feat5"), Method2 = c("Variant3", "Variant4", "Variant5"), Attribute = c("Attr1", "Attr2", "Attr3"), stringsAsFactors = FALSE) df_input_list <- list(df1, df2) # 定义每个DataFrame对应的前缀 prefixes <- c("String1", "String2")
方法1:基础for循环实现
以下是正确的循环写法,解决你之前的实现问题:
for (i in seq_along(df_input_list)) { # 遍历当前DataFrame的所有列,给每个元素添加前缀 df_input_list[[i]] <- lapply(df_input_list[[i]], function(col) { paste0(prefixes[i], "_", col) }) # 将处理后的列表转回DataFrame格式 df_input_list[[i]] <- as.data.frame(df_input_list[[i]], stringsAsFactors = FALSE) }
方法2:用purrr包简化代码(更高效简洁)
如果习惯tidyverse风格,用map2可以同时遍历DataFrame列表和前缀向量:
library(purrr) library(dplyr) df_input_list <- map2(df_input_list, prefixes, function(df, prefix) { # 对DataFrame的所有列应用前缀拼接 mutate(df, across(everything(), ~paste0(prefix, "_", .x))) })
验证结果
运行后查看处理后的列表,每个DataFrame的所有元素都会带上对应前缀:
print(df_input_list[[1]]) #> Feature Method #> 1 String1_Feat1 String1_Variant1 #> 2 String1_Feat2 String1_Variant2 print(df_input_list[[2]]) #> Feature2 Method2 Attribute #> 1 String2_Feat3 String2_Variant3 String2_Attr1 #> 2 String2_Feat4 String2_Variant4 String2_Attr2 #> 3 String2_Feat5 String2_Variant5 String2_Attr3
内容的提问来源于stack exchange,提问作者Sphenoidale
相关产品推荐
相关产品推荐

