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

R语言:修改数据框中重复Other的rater标签并保留至原数据

问题:修改DataFrame中重复的Other标签

我有一个包含id、rater、raterscore字段的DataFrame,每个id对应rater1、rater2、Other各一条评分,但部分id存在两个Other评分,需要把这些id的第二个Other标签改成Other2。

我试了下面的代码,但用filter后修改的内容没法保留到主数据框里:

d %>% filter(rater=="Other") %>% group_by(id) %>% 
  filter(n()>1) %>% mutate(rater= case_when(ifelse(row_number()%%2==0,"Other2",rater))

当前数据结构

idraterraterscore
1rater23
1rater12
1Other3
2rater11.5
2rater23.2
2Other1.1
2Other2
3rater12.5
3rater22.7
3Other2.1
3Other2
4rater12.5
4rater22.7
4Other2.1
4Other2
5rater12.5
5rater22.7
5Other2.1

期望数据结构

把第二个Other标签改为Other2:

idraterraterscore
1rater23
1rater12
1Other3
2rater11.5
2rater23.2
2Other1.1
2Other22
3rater12.5
3rater22.7
3Other2.1
3Other22
4rater12.5
4rater22.7
4Other2.1
4Other22
5rater12.5
5rater22.7
5Other2.1

解决方案

问题出在你先用filter(rater=="Other")筛选了数据,后续修改只针对这部分子集,没有合并回原数据。正确的做法是直接在原数据上分组处理,不用提前过滤:

方法一:用ifelse实现

library(dplyr)

d_modified <- d %>%
  group_by(id, rater) %>%
  mutate(
    rater = ifelse(rater == "Other" & row_number() == 2, "Other2", rater)
  ) %>%
  ungroup()

方法二:用case_when实现(逻辑更清晰)

d_modified <- d %>%
  group_by(id, rater) %>%
  mutate(
    rater = case_when(
      rater == "Other" & row_number() == 2 ~ "Other2",
      TRUE ~ rater
    )
  ) %>%
  ungroup()

核心逻辑说明

  • 按id和rater分组,这样每个id下的Other会单独成组,便于标记顺序
  • row_number()用来识别组内的行位置,第二个Other会被标记为2
  • 直接在原数据集上修改,无需过滤子集,确保所有原始数据都被保留,仅符合条件的rater标签被替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:53:10