使用R计算相同条件下的费率
我有一个问题要计算相同身份证号码下的费率。 以下是示例数据集d:使用R计算相同条件下的费率,r,rate,R,Rate,我有一个问题要计算相同身份证号码下的费率。 以下是示例数据集d: id answer 1 1 1 0 1 0 1 1 1 1 1 1 1 0 2 0 2 0 2 0 3 1 3 0 理想的输出是 id rate freq 1 4/7 (=0.5714) 7 2 0 3 3 1/2 (=0.5) 2 谢谢。试试看 library(data.table) setDT(df1)[,l
id answer
1 1
1 0
1 0
1 1
1 1
1 1
1 0
2 0
2 0
2 0
3 1
3 0
理想的输出是
id rate freq
1 4/7 (=0.5714) 7
2 0 3
3 1/2 (=0.5) 2
谢谢。试试看
library(data.table)
setDT(df1)[,list(rate= mean(answer), freq=.N) ,id]
# id rate freq
#1: 1 0.5714286 7
#2: 2 0.0000000 3
#3: 3 0.5000000 2
或
数据
df1只是为了好玩,您可以使用aggregate
> aggregate(answer~id, function(x) c(rate=mean(x), freq=length(x)), data=df1)
id answer.rate answer.freq
1 1 0.5714286 7.0000000
2 2 0.0000000 3.0000000
3 3 0.5000000 2.0000000
根据您希望作为输出的内容,您可能希望在aggregate
语句之后添加此语句,其中ag
是aggregate
语句的输出:带有(ag,data.frame(id,answer))
在dplyr方法中使用不使用mean
有什么原因吗?@docendodiscimus首先我将其编码为sum()/n()
,因为mean
没有通过查看预期的输出为我单击。然后,我意识到mean
是有效的,忘了将其更改为dplyr
df1 <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L), answer = c(1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L,
0L)), .Names = c("id", "answer"), class = "data.frame",
row.names = c(NA, -12L))
> aggregate(answer~id, function(x) c(rate=mean(x), freq=length(x)), data=df1)
id answer.rate answer.freq
1 1 0.5714286 7.0000000
2 2 0.0000000 3.0000000
3 3 0.5000000 2.0000000