gpt4 book ai didi

r - 按 R/dplyr 中的条件最大值过滤

转载 作者:行者123 更新时间:2023-12-04 12:30:36 24 4
gpt4 key购买 nike

我有按测试和每个测试中的子组分组的数据。然后我收集了一系列比例,每个比例都有一个 p 值来确定其重要性。所以我的数据的基本结构是:

testid <- paste0("T", c(rep(1, 5), rep(2, 5)))
groupid <- rep(1:5, 2)
prop <- c(0.98, 0.76, 0.54, 0.32, 0.1, 0.79, 0.32, 0.09, 0.04, 0.01)
pval <- c(0.01, 0.02, 0.03, 0.04, 0.1, 0.03, 0.06, 0.25, 0.35, 0.45)

library(dplyr)
df <- tibble(testid, groupid, prop, pval)

df

# A tibble: 10 x 4
testid groupid prop pval
<chr> <int> <dbl> <dbl>
1 T1 1 0.98 0.01
2 T1 2 0.76 0.02
3 T1 3 0.54 0.03
4 T1 4 0.32 0.04
5 T1 5 0.1 0.1
6 T2 1 0.79 0.03
7 T2 2 0.32 0.06
8 T2 3 0.09 0.25
9 T2 4 0.04 0.35
10 T2 5 0.01 0.45

我需要的是查看每个测试,并从 p 低于 0.05 的最高组编号中收集结果。所以期望的输出是:

desired <- df %>% 
filter((testid == "T1" & groupid == 4) | (testid == "T2" & groupid == 1))

desired

# A tibble: 2 x 4
testid groupid prop pval
<chr> <int> <dbl> <dbl>
1 T1 4 0.32 0.04
2 T2 1 0.79 0.03

查看 Stack Overflow 上的类似问题,我尝试了这段代码...

x <- df %>%
group_by(testid) %>%
filter(row_number() <= max(pval < 0.5)[1])

...但这不太正确,它为两个测试返回了第 1 组。

帮助? (请注意,由于我已经进行了先前的过滤,因此每个测试应该至少有一个 p < 0.05 的组号)。

(此外,dplyr 是我的首选方法,但不是必需的。)

最佳答案

我们可以使用带有“pval”的逻辑向量对“groupid”进行子集化,并使用%in%从“groupid”的max值构造一个逻辑向量'

library(dplyr)
df %>%
group_by(testid) %>%
filter(groupid %in% max(groupid[pval < 0.05])) %>%
ungroup

-输出

# A tibble: 2 × 4
testid groupid prop pval
<chr> <int> <dbl> <dbl>
1 T1 4 0.32 0.04
2 T2 1 0.79 0.03

或者另一种选择是排列列,然后用slice_head/slice_tail做一个group_by

library(dplyr)
df %>%
filter(pval < 0.05) %>%
arrange(testid, groupid, desc(pval)) %>%
group_by(testid) %>%
slice_tail(n = 1) %>%
ungroup

-输出

# A tibble: 2 × 4
testid groupid prop pval
<chr> <int> <dbl> <dbl>
1 T1 4 0.32 0.04
2 T2 1 0.79 0.03

关于r - 按 R/dplyr 中的条件最大值过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69369063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com