我需要根据一些分组变量计算响应的概率(df $ C),然后将输出写回df。
作为我的数据的一个例子
A B C
1 1 1
2 1 0
3 1 1
1 2 0
2 2 1
3 2 1
所以最终我需要价值的平均概率' 1'出现在df $ C中,df $ A中的每个值。 df $ A值在分组变量df $ B中重复。 任何帮助将不胜感激
答案 0 :(得分:0)
您可以使用dplyr
。在您的示例中,A和B列的每个分组中只有一个样本,因此结果列与C列相同。
library(dplyr)
dat %>% group_by(B, A) %>%
mutate(res = mean(C==1))
# A B C res
# 1 1 1 1 1
# 2 2 1 0 0
# 3 3 1 1 1
# 4 1 2 0 0
# 5 2 2 1 1
# 6 3 2 1 1
数据
dat <- structure(list(A = c(1L, 2L, 3L, 1L, 2L, 3L), B = c(1L, 1L, 1L,
2L, 2L, 2L), C = c(1L, 0L, 1L, 0L, 1L, 1L), res = c(0.5, 0.5,
1, 0.5, 0.5, 1)), .Names = c("A", "B", "C", "res"), row.names = c(NA,
-6L), class = "data.frame")
答案 1 :(得分:0)
由于我开始喜欢基础R解决方案,这是我的:
df1 <- split(df, list(df$A, df$B))
pr <- lapply(df1, function(x) mean(x$C == 1) )
df1 <- unsplit(df1, list(df$A, df$B))
df1$pr <- unlist(pr)
df1
A B C pr
1 1 1 1 1
2 2 1 0 0
3 3 1 1 1
4 1 2 0 0
5 2 2 1 1
6 3 2 1 1