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

使用For循环覆盖R数据框列中值的问题求助

问题分析

你的代码核心有两个致命错误:

  1. 前两个循环修改的是单独的Grupa向量,而非dane2数据框里的Grupa列,等于白做操作;
  2. 所有循环的索引逻辑完全错误:dane2$Grupa[dane2$Grupa]是筛选dane2$Grupa为TRUE的行,但初始值都是NA,根本不会匹配任何行;且for (i in k1)是遍历k1的每一列,不是目标行,完全不符合需求。

解决方案

假设你的k1/k2/m1/m2数据框和dane2有共同的唯一标识(比如行名或ID列),以下是两种可行的修正方式:

方案1:修正匹配逻辑(保留你原本的dane2构建思路)

直接通过共同标识定位目标行,替换Grupa列的NA值:

# 构建dane2并添加Grupa列
dane2 <- dane[, -c(3,4,6,7,8,9,10,11,12,13,14)]
dane2$Grupa <- NA  # 直接给dane2添加列,无需单独创建Grupa向量

# 处理K1分组:通过行名匹配目标行
k1 <- kob1chol[sample(nrow(kob1chol), 15), ]
dane2$Grupa[rownames(dane2) %in% rownames(k1)] <- "K1"

# 处理K2分组
k2 <- kob2chol[sample(nrow(kob2chol), 15), ]
dane2$Grupa[rownames(dane2) %in% rownames(k2)] <- "K2"

# 处理M1分组
m1 <- mez1chol[sample(nrow(mez1chol), 15), ]
dane2$Grupa[rownames(dane2) %in% rownames(m1)] <- "M1"

# 处理M2分组
m2 <- mez2chol[sample(nrow(mez2chol), 15), ]
dane2$Grupa[rownames(dane2) %in% rownames(m2)] <- "M2"

如果你的数据用ID列做唯一标识,把rownames()替换成$ID即可,比如:

dane2$Grupa[dane2$ID %in% k1$ID] <- "K1"

方案2:向量化合并(R推荐写法,避免循环)

直接给每个分组数据添加Grupa列后合并,更简洁高效:

# 给每个分组抽样并添加Grupa标识
k1 <- kob1chol[sample(nrow(kob1chol), 15), ]
k1$Grupa <- "K1"

k2 <- kob2chol[sample(nrow(kob2chol), 15), ]
k2$Grupa <- "K2"

m1 <- mez1chol[sample(nrow(mez1chol), 15), ]
m1$Grupa <- "M1"

m2 <- mez2chol[sample(nrow(mez2chol), 15), ]
m2$Grupa <- "M2"

# 合并所有分组得到最终dane2
dane2 <- rbind(k1, k2, m1, m2)
# 若需要和原dane的列保持一致,可添加筛选:dane2 <- dane2[, colnames(dane[, -c(3,4,6,7,8,9,10,11,12,13,14)])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:30:59