首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在R中只保留满足特定条件的行

如何在R中只保留满足特定条件的行
EN

Stack Overflow用户
提问于 2021-03-13 01:14:39
回答 2查看 42关注 0票数 0

我有一个数据框架,包含大约700个病例,需要1800次检查。有些病例经历了几种不同的方式。我只想留下一个检查结果,根据具体情况的情态。

下面是一个虚拟数据框架:

代码语言:javascript
运行
复制
df <- data.frame (ID = c("1", "1", "1", "2", "2", "3", "4", "4", "5", "5"),
                  c1 = c("A", "B", "C", "A", "C", "A", "A", "B", "B", "C"),
                  x1 = c(5, 4, 5, 3, 1, 3, 4, 2, 3, 5),
                  x2 = c(4, 3, 7, 9, 1, 2, 4, 7, 5, 0))

有五个案例,10次考试。c1是考试方式(条件),结果是x1和x2。

根据以下条件,我只想留下一行:

C>B>A

我想先将行与C放在一起;如果没有,则将行留为B;如果C和B不在,则将行保留为A。

期望产出:

代码语言:javascript
运行
复制
output <- data.frame (ID = c("1", "2", "3", "4", "5"),
                      c1 = c("C", "C", "A", "B", "C"),
                      x1 = c(5, 1, 3, 2, 5),
                      x2 = c(7, 1, 2, 7, 0))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-13 07:36:10

您可以根据所需的正确顺序对数据进行arrange,并为每个ID选择它的第一行。

代码语言:javascript
运行
复制
library(dplyr)

req_order <- c('C', 'B', 'A')

df %>%
  arrange(ID, match(c1, req_order)) %>%
  distinct(ID, .keep_all = TRUE)

#  ID    c1       x1    x2
#  <chr> <chr> <dbl> <dbl>
#1 1     C         5     7
#2 2     C         1     1
#3 3     A         3     2
#4 4     B         2     7
#5 5     C         5     0

在基数R中,这可以写成:

代码语言:javascript
运行
复制
df1 <- df[order(match(df$c1, req_order)), ]
df1[!duplicated(df1$ID), ]
票数 1
EN

Stack Overflow用户

发布于 2021-03-13 01:42:30

以下是一种方法:

代码语言:javascript
运行
复制
df.srt <- df[order(df$c1, decreasing=TRUE), ]
df.spl <- split(df.srt, df.srt$ID)
first <- lapply(df.spl, head, n=1)
result <- do.call(rbind, first)
result
#   ID c1 x1 x2
# 1  1  C  5  7
# 2  2  C  1  1
# 3  3  A  3  2
# 4  4  B  2  7
# 5  5  C  5  0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66609204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档