如何通过循环为多个数据框新增mpg与cyl相乘的new列
解决方法
你的代码报错的核心原因是:c(mtcars1, mtcars2)会把两个数据框拆成单个列的向量集合,循环时每个x都是单个列向量,而非完整的数据框,自然无法执行x$new的赋值操作。以下是两种可行的修正方案:
方案1:通过变量名字符串循环(直接修改原数据框)
使用get()获取变量名对应的对象,修改后用assign()将结果存回原变量:
mtcars1 <- mtcars mtcars2 <- mtcars for(df_name in c("mtcars1", "mtcars2")){ current_df <- get(df_name) current_df$new <- current_df$mpg * current_df$cyl assign(df_name, current_df) }
方案2:用列表管理数据框(更推荐的R风格)
先把数据框存入列表,批量修改后再提取回原变量:
mtcars1 <- mtcars mtcars2 <- mtcars # 将数据框存入命名列表 df_collection <- list(mtcars1 = mtcars1, mtcars2 = mtcars2) # 循环修改列表中的每个数据框 for(i in seq_along(df_collection)){ df_collection[[i]]$new <- df_collection[[i]]$mpg * df_collection[[i]]$cyl } # 提取修改后的数据框到原变量 mtcars1 <- df_collection$mtcars1 mtcars2 <- df_collection$mtcars2
如果想更简洁,也可以用lapply替代循环:
df_collection <- lapply(df_collection, function(df){ df$new <- df$mpg * df$cyl df })
内容的提问来源于stack exchange,提问作者tchoup
相关产品推荐
相关产品推荐

