【问题标题】:Calculate probability based on grouping variables in R根据 R 中的分组变量计算概率
【发布时间】:2015-08-05 21:14:47
【问题描述】:

我需要根据一些分组变量计算响应的概率(df$C)并将输出写回 df。

以我的数据为例

A B C
1 1 1
2 1 0
3 1 1
1 2 0
2 2 1
3 2 1

因此,对于 df$A 中的每个值,最终我需要 df$C 中出现值“1”的平均概率。 df$A 值在分组变量 df$B 中重复。 任何帮助将不胜感激

【问题讨论】:

  • 是的,抱歉,所以我需要为每个 A、B 中的每个组生成结果

标签: r probability


【解决方案1】:

您可以使用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")

【讨论】:

    【解决方案2】:

    因为我开始喜欢基本 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
    

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 2018-08-29
      • 2020-04-17
      • 2017-06-05
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多