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

如何按Id分组筛选Score非缺失值并保留Visit列有效信息?

问题描述

以下是示例数据框:

mydata <- data.frame(Id = c(01,01,02,02,02,03,03,04,04,04),
                     Score = c(1,NA,NA,5,78,9,5,NA,3,4),
                     Visit = c(NA, "Yes", "No", NA, NA, "Yes", NA, "Yes", NA, NA))

样本数据:

IDScoreVisit
11NA
1NAYes
2NANo
25NA
278NA
39Yes
35NA
4NAYes
43NA
44NA

需求:按Id分组,仅保留Score列非缺失值的行,同时将每个Id对应的Visit有效信息填充到该组所有行中,最终得到如下结果:

IDScoreVisit
11Yes
25No
278No
39Yes
35Yes
43Yes
44Yes

简言之,按Id分组后,将Score和Visit的非空值整合到同一行中。


解决方案

方法1:使用dplyr(tidyverse工具链)

# 安装依赖(首次使用时执行)
# install.packages("dplyr")
library(dplyr)

result <- mydata %>%
  group_by(Id) %>%
  # 提取每组中Visit的非缺失值(假设每个Id仅一个有效Visit值)
  mutate(Visit = first(na.omit(Visit))) %>%
  # 筛选Score非缺失的行
  filter(!is.na(Score)) %>%
  ungroup()

print(result)

方法2:使用Base R

# 按Id分组填充Visit列
mydata$Visit <- ave(mydata$Visit, mydata$Id, FUN = function(x) x[!is.na(x)][1])
# 筛选Score非缺失的行
result <- mydata[!is.na(mydata$Score), ]

print(result)

说明:两种方法默认每个Id对应的Visit列只有一个非缺失值,若存在多个有效Visit值,可根据需求将first替换为last或其他聚合逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:05:20