通过对 ID 列进行分组,使用阈值对列进行子集化
Subset a column using a threshold value by grouping the ID column
我有一个 df 是从这里获得的(例如。)
ID <- c("A","A","A","A","A","B","B","B","B","B")
Point_A <- c(10,25,30,40,50,60,75,80,90,100)
Point_B <- c(21,32,43,54,65,11,22,53,94,15)
df1 <- data.frame(ID,Point_A,Point_B)
我想通过取 < 阈值的值来对数据帧进行子集化(此处阈值 = Point_A 列的组中位数 - 7.5)。
我目前正在通过取整列的中位数并减去 7.5 来进行子设置。
df2 <- subset(df1, df1$Point_A < median(Point_A) - 7.5)
但是,我想取组中位数(每个 ID 的中位数。这里是 A、B)然后减去 7.5 并进行子集化。
期望的输出
ID Point_A Point_B
A 10 21
B 60 11
对于 ID A,30 是中位数,30 -7.5 = 22.5,因此 A 的输出中只出现 10。这同样适用于 B。
请指导我如何去做这件事。
尝试
library(dplyr)
df1 %>% group_by(ID) %>% filter(Point_A < median(Point_A) - 7.5,
Point_B < median(Point_B) - 7.5)
或者,按照@Frank 在评论中的建议:
mycond <- function(x) x < median(x) - 7.5
df1 %>% group_by(ID) %>% filter(mycond(Point_A), mycond(Point_B))
给出:
#Source: local data frame [2 x 3]
#Groups: ID
#
# ID Point_A Point_B
#1 A 10 21
#2 B 60 11
编辑
我可能误解了你最初的问题。如果您只想过滤 Point_A
,请执行:
df %>% group_by(ID) %>% filter(Point_A < median(Point_A) - 7.5)
我有一个 df 是从这里获得的(例如。)
ID <- c("A","A","A","A","A","B","B","B","B","B")
Point_A <- c(10,25,30,40,50,60,75,80,90,100)
Point_B <- c(21,32,43,54,65,11,22,53,94,15)
df1 <- data.frame(ID,Point_A,Point_B)
我想通过取 < 阈值的值来对数据帧进行子集化(此处阈值 = Point_A 列的组中位数 - 7.5)。
我目前正在通过取整列的中位数并减去 7.5 来进行子设置。
df2 <- subset(df1, df1$Point_A < median(Point_A) - 7.5)
但是,我想取组中位数(每个 ID 的中位数。这里是 A、B)然后减去 7.5 并进行子集化。
期望的输出
ID Point_A Point_B
A 10 21
B 60 11
对于 ID A,30 是中位数,30 -7.5 = 22.5,因此 A 的输出中只出现 10。这同样适用于 B。
请指导我如何去做这件事。
尝试
library(dplyr)
df1 %>% group_by(ID) %>% filter(Point_A < median(Point_A) - 7.5,
Point_B < median(Point_B) - 7.5)
或者,按照@Frank 在评论中的建议:
mycond <- function(x) x < median(x) - 7.5
df1 %>% group_by(ID) %>% filter(mycond(Point_A), mycond(Point_B))
给出:
#Source: local data frame [2 x 3]
#Groups: ID
#
# ID Point_A Point_B
#1 A 10 21
#2 B 60 11
编辑
我可能误解了你最初的问题。如果您只想过滤 Point_A
,请执行:
df %>% group_by(ID) %>% filter(Point_A < median(Point_A) - 7.5)