如何基于列条件替换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
相关产品推荐
相关产品推荐

