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

如何基于列条件替换R DataFrame中的index列值?

R数据框分组替换index值

原始数据

dat=structure(list(te = c("A", "B", "C","A","B","C",
                  "A", 
                  "B", "C","A", "B","C"), 
           rig = c("bad", "bad","bad","good", "goog","good",
                    
                   "ras", "ras","ras", "fas", "fas", "fas"), 
 index = c(1,2,5, 6, 4,  1, 0,4,2,1,4,5),value = 
 c(0.52,0.51,0.57, 0.49, 0.97,0.91,  0.43, 0.90, 
 0.98,0.80,0.70,0.11), name = structure(c(1L, 2L, 3L, 4L, 5L, 
6L,7L,8L,9L,10L,11L,12L), levels = 
                                                                           
  c("az","az","az",  "az", "az","az","nc", "nc", "nc", 
  "nc","nc","nc"), class = "factor")), 
      row.names = c(NA, 12L), class = "data.frame")

处理规则

  • 当name="az"且rig="bad"时:A、B、C对应的value差值均<0.09,将该分组所有行的index替换为分组内最大index值(即5)
  • 当name="az"且rig="good"时:B、C对应的value差值<0.09,仅将B、C对应的行的index替换为该子集的最大index值(即4)
  • 当name="nc"且rig="ras"时:B、C对应的value差值<0.09,仅将B、C对应的行的index替换为该子集的最大index值(即4)
  • 当name="nc"且rig="fas"时:A、B、C对应的value差值>0.09,保持index值不变

解决方案

使用dplyr包实现分组条件逻辑处理,代码如下:

library(dplyr)

dat_processed <- dat %>%
  group_by(name, rig) %>%
  mutate(
    index = case_when(
      # 规则1:az+bad分组全部替换为最大index
      name == "az" & rig == "bad" ~ max(index),
      # 规则2:az+good分组,仅B、C替换为对应子集的最大index
      name == "az" & rig == "good" & te %in% c("B", "C") ~ max(index[te %in% c("B", "C")]),
      # 规则3:nc+ras分组,仅B、C替换为对应子集的最大index
      name == "nc" & rig == "ras" & te %in% c("B", "C") ~ max(index[te %in% c("B", "C")]),
      # 其他情况保留原index(包含规则4的nc+fas分组)
      TRUE ~ index
    )
  ) %>%
  ungroup()

# 输出处理后的数据
print(dat_processed, row.names = TRUE)

最终输出

te  rig index value name
    1   A  bad    5 0.52   az
    2   B  bad    5 0.51   az
    3   C  bad    5 0.57   az
    4   A good    6 0.49   az
    5   B goog    4 0.97   az
    6   C good    4 0.91   az
    7   A  ras    0 0.43   nc
    8   B  ras    4 0.90   nc
    9   C  ras    4 0.98   nc
   10  A  fas    1 0.80   nc
   11  B  fas    4 0.70   nc
   12  C  fas    5 0.11   nc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:01:01