在 r 中拆分分组的二项式数据



我有看起来像这样的数据

samplesize <- 6
group <- c(1,2,3)
total <- rep(samplesize,length(group))
outcomeTrue <- c(2,1,3)
df <- data.frame(group,total,outcomeTrue)

并希望我的数据看起来像这样

group2 <- c(rep(1,6),rep(2,6),rep(3,6))
outcomeTrue2 <- c(rep(1,2),rep(0,6-2),rep(1,1),rep(0,6-1),rep(1,3),rep(0,6-3))
df2 <- data.frame(group2,outcomeTrue2)

也就是说,我有二进制数据,其中我被告知总观察和成功的观察,但更希望将其组织为单个观察,其明确结果为 0 或 1。 即所需结果的可视化示例

有没有一种简单的方法可以在 r 中做到这一点,或者我需要自己编写一个循环来自动化它?

这是一个带有tidyverrse的选项。 我们uncount使用"total"列扩展行,按"group"分组,创建一个基于row_number()和"resultTrue"值的逻辑条件的二进制索引

library(tidyverse)
df %>% 
uncount(total) %>% 
group_by(group) %>%
mutate(outcomeTrue = as.integer(row_number() <= outcomeTrue[1]))
# A tibble: 18 x 2
# Groups:   group [3]
#   group outcomeTrue
#   <dbl>       <int>
# 1     1           1
# 2     1           1
# 3     1           0
# 4     1           0
# 5     1           0
# 6     1           0
# 7     2           1
# 8     2           0
# 9     2           0
#10     2           0
#11     2           0
#12     2           0
#13     3           1
#14     3           1
#15     3           1
#16     3           0
#17     3           0
#18     3           0

你也在那里。 只需将组 2 变量与 x 位置的 "[" 函数一起使用:

df[ group2 , ]
group total outcomeTrue
1       1     6           2
1.1     1     6           2
1.2     1     6           2
1.3     1     6           2
1.4     1     6           2
1.5     1     6           2
2       2     6           1
2.1     2     6           1
2.2     2     6           1
2.3     2     6           1
2.4     2     6           1
2.5     2     6           1
3       3     6           3
3.1     3     6           3
3.2     3     6           3
3.3     3     6           3
3.4     3     6           3
3.5     3     6           3

当与rowname匹配的数字或字符值放在"["的 x 位置时,它将复制整行

下面是一个基本的 R 解决方案。

do.call(rbind, lapply(split(df, df$group), function(x) data.frame(group2 = x$group, outcome2 = rep(c(1,0), times = c(x$outcome, x$total-x$outcome)))))
#     group2 outcome2
# 1.1      1        1
# 1.2      1        1
# 1.3      1        0
# 1.4      1        0
# 1.5      1        0
# 1.6      1        0
# 2.1      2        1
# 2.2      2        0
# 2.3      2        0
# 2.4      2        0
# 2.5      2        0
# 2.6      2        0
# 3.1      3        1
# 3.2      3        1
# 3.3      3        1
# 3.4      3        0
# 3.5      3        0
# 3.6      3        0

最新更新