繁体   English   中英

R中使用条件和按ID分组计算值的比例

[英]Calculating proportion of values using condition and grouping by ID in R

我有一个数据表:

DT <- data.table(ID = c(1,1,1,1,2,2,2,3,3), score=c(78, 93, 88, 50, 101, 95, 89, 90))

# DT output
ID, score
1, 78
1, 93
1, 88
1, 50
2, 100
2, 95
2, 71
3, 90
3, 75

我想获取每个 ID 80 以上和以下分数的比例。 例如:

ID, above_80, below_80
1, 0.5, 0.5
2, 0.67, 0.33
3, 0.5, 0.5

我尝试使用以下方法:

proportion_DT <- DT[,list(above_80 = sum(score >= 80)/sum(score < 80),
                          below_80 = sum(score < 80)/sum(score >= 80)), by=ID]

但这并没有产生正确的表格。 这可以使用data.table吗?

可以用逻辑值的mean计算比例。 尝试 -

library(data.table)

DT[, .(above_80 = mean(score >= 80),below_80 = mean(score < 80)), ID]

#   ID above_80 below_80
#1:  1    0.500    0.500
#2:  2    0.667    0.333
#3:  3    0.500    0.500

当我们对它们进行数学计算时,逻辑值( TRUEFALSE )分别被视为 1 和 0。

这几个例子将有助于澄清 -

mean(c(TRUE, FALSE, TRUE, FALSE))
#[1] 0.5

mean(c(TRUE, TRUE, TRUE, FALSE))
#[1] 0.75

mean(c(TRUE, TRUE, TRUE, TRUE))
#[1] 1

score >= 80类似地返回逻辑值,并对它们取mean为我们提供它们的比例。

数据

DT <- data.table(ID = c(1,1,1,1,2,2,2,3,3), 
                 score=c(78, 93, 88, 50, 100, 95, 71, 90, 75))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM