【发布时间】:2020-11-11 21:23:50
【问题描述】:
在至少三个样本中保留 Obs 值超过样本阈值的行 (Obs)。删除 2 或更少的行。
即。
- Obs 1 只有 S5 超过阈值,因此将被过滤掉;
- Obs2 有 4 个,Obs 3 有 3 个,因此它们将保留在 df 中。
.
df <- data.frame(column=c("threshold", "Obs1", "Obs2", "Obs3"), S1 = c(1.7,1.4,1.9,1.3), S2= c(0.9,0.8,2,1), S3=c(2.5,2.4,2.1,0.5), S4=c(0.4,0.5,0.6,0.9), S5=c(1.2,1.4,1.3,1.6))
df
column S1 S2 S3 S4 S5
threshold 1.7 0.9 2.5 0.4 1.2
Obs1 1.4 0.8 2.4 0.5 1.4
Obs2 1.9 2.0 2.1 0.6 1.3
Obs3 1.3 1.0 0.5 0.9 1.6
期望的输出:
column S1 S2 S3 S4 S5
Obs2 1.9 2.0 2.1 0.6 1.3
Obs3 1.3 1.0 0.5 0.9 1.6
我不知道如何编码,但我想知道是否使用这样的逻辑:
logic <- if df (S1-5)>= threshold value then =1; if df (S1-5) < threhold then = 0
library(dplyr)
logic %>% rowwise %%
filter(sum(c_across(where(is.numeric))) >= 3) %>%
ungroup
【问题讨论】:
-
df 的第一行叫做“threshold”,包含每列的阈值