我拥有与36个感兴趣区域(ROI)相关的数据,大约每个ROI 380像素。我的数据就像:
ROI_name T_K
1 bt_full_05 303.88
1.1 bt_full_05 303.93
1.2 bt_full_05 303.72
1.3 bt_full_05 303.43
1.4 bt_full_05 302.93
1.5 bt_full_05 302.93
...
36.362 bt_full_40 301.65
36.363 bt_full_40 301.47
36.364 bt_full_40 301.52
36.365 bt_full_40 302.02
36.366 bt_full_40 303.28
36.367 bt_full_40 303.78
我想为每个ROI计算平均值T_K,但过滤掉低于给定分位数的值,例如0.25,并输出直至该分位数的值的平均值。理想情况下,我可以报告几个分位数,0.1、0.25、0.5的均值T_K。我有:
groupquant <- cleared_data %>% group_by(ROI_name) %>%
summarise(quants = quantile(T_K, 0.1))
这给了我分位数。但是这个
groupquant <- cleared_data %>% group_by(ROI_name) %>%
filter(cleared_data$T_K <= quantile(T_K, 0.1)) #%>%
投掷
错误:结果的长度必须为392,而不是14082
我无处可去!干杯,安德鲁。
我认为示例数据有点小,无法证明您想这样做。因此,我创建了自己的数据,称为foo
。对于每个ROI_name
,我都使用filter()
删除了一些数据。所有小于quantile(T_K, 0.25)
的值都将被删除。然后,我决定取两个分位数的值(即0.5和0.75)。在summarize()
部分中,我将获得一个带有两个数值的向量,并为每个组创建一个数据框。最后,我使用unnest()
创建最终输出。
library(tidyverse)
set.seed(111)
foo <- tibble(ROI_name = rep(c("bt_full_05", "bt_full_40", "bt_full_2"), each = 30),
T_K = runif(n = 90, min = 0, max = 300))
group_by(foo, ROI_name) %>%
filter(T_K > quantile(T_K, 0.25)) %>%
summarize(temp = list(enframe(quantile(x = T_K, prob = c(0.5, 0.75)),
name = "percentile"))) %>%
unnest(temp)
ROI_name percentile value
<chr> <chr> <dbl>
1 bt_full_05 50% 157.
2 bt_full_05 75% 183.
3 bt_full_2 50% 157.
4 bt_full_2 75% 229.
5 bt_full_40 50% 192.
6 bt_full_40 75% 237.