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

如何用tidy方法筛选同时含urea和creat测试记录的R数据框行?

筛选同时包含两种测试记录的数据行(tidy风格解法)

原始数据

我们有记录化学反应测量数据的R数据框,包含name、test、value三列:

df <- data.frame(name=c("A","A","B","C","C","D"),
                 test=c("urea","creat","urea","urea","creat","creat"),
                 value=c(30,1,40,50,2,0.6))

数据预览:

name  test value
1    A  urea  30.0
2    A creat   1.0
3    B  urea  40.0
4    C  urea  50.0
5    C creat   2.0
6    D creat   0.6

需求

筛选出同时拥有urea和creat两类测试记录的name对应的所有行,期望结果:

name  test value
1    A  urea  30.0
2    A creat   1.0
3    C  urea  50.0
4    C creat   2.0

尝试的错误方案

以下循环写法未能实现需求:

ndf <- data.frame()
n<-6
while(n>0){
    ifelse(df[n,2]=="creat" && df[n-1,2]=="urea",
        n<-n-2,
        ndf <- add_row(ndf, df[(n-1):n,2]),
        n<-n-1)
}

tidy风格的正确解法

使用dplyr包的分组筛选逻辑即可实现,无需rowwise:

library(dplyr)

result <- df %>%
  group_by(name) %>%
  filter(all(c("urea", "creat") %in% test)) %>%
  ungroup()

# 查看结果
result

代码逻辑说明

  • group_by(name):将数据按name分组,把同一名称的所有测试记录归为一组
  • filter(all(c("urea", "creat") %in% test)):检查每组的test列是否同时包含"urea"和"creat"两个值,仅保留满足该条件的分组
  • ungroup():取消分组结构,返回标准数据框格式

运行后即可得到符合需求的结果。


内容的提问来源于stack exchange,提问作者Adonis Cedeño

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:56:15