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

在R语言中按identifier去重,多出现项仅保留variable='x'的行

问题描述

给定如下数据集:

identifiervariable
patient1y
patient2x
patient2y
patient2y
patient3x
patient3y

需要在R中实现:按identifier字段去重,每个identifier仅保留一行;若某个identifier出现多次,仅保留其中variable等于"x"的行。


解决方案

首先构造示例数据框,方便复现需求:

df <- data.frame(
  identifier = c("patient1", "patient2", "patient2", "patient2", "patient3", "patient3"),
  variable = c("y", "x", "y", "y", "x", "y")
)

方法1:使用dplyr包(tidyverse风格)

通过分组筛选直接实现需求,逻辑清晰直观:

library(dplyr)

result_df <- df %>%
  group_by(identifier) %>%
  # 筛选规则:要么是variable为"x",要么该分组仅一行(对应唯一出现的identifier)
  filter(variable == "x" | n() == 1) %>%
  # 每个分组只取第一行,确保去重
  slice_head(n = 1) %>%
  ungroup()

print(result_df)

方法2:使用base R(无需额外安装包)

通过排序让目标行前置,再利用duplicated()函数完成去重:

# 排序:按identifier分组,让variable为"x"的行排在每组最前面
df_sorted <- df[order(df$identifier, df$variable != "x"), ]

# 去重,保留每个identifier的第一行
result_df_base <- df_sorted[!duplicated(df_sorted$identifier), ]

print(result_df_base)

最终输出结果

两种方法都会得到如下结果:

#   identifier variable
# 1   patient1        y
# 2   patient2        x
# 3   patient3        x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:57:27