我使用“group_by”和两个因素对数据集进行了分组,并计算了每个结果组属于每个感兴趣类别的观察数量,如下所示。
df1 <- data.frame(x = c(a,a,b,a,b,c,a,c,a,b), y = c(0,1,0,1,1,0,1,0,0,0,0), var = c(inf, med, inf, sup, med, med, sup, inf, med, sup))
df1 %>%
group_by(x,y) %>%
count(var) -> conta_var
# A tibble: 9 × 4
# Groups: x, y [5]
x y var n
<chr> <dbl> <chr> <int>
1 a 0 inf 1
2 a 0 med 1
3 a 1 med 1
4 a 1 sup 2
5 b 0 inf 1
6 b 0 sup 1
7 b 1 med 1
8 c 0 inf 1
9 c 0 med 1
现在我想添加一个名为 n_perc 的新列,它采用每个 n 并将其除以 x-y 的每个组合的观察总数
我可以通过首先通过过滤每个组来计算每个 n 来手动完成:
df1 %>%
filter(x == "a", y = 1) %>%
nrow() -> n_f
然后使用带有嵌套 ifelse 函数的 mutate 添加列,但我相信有一种更快的方法来做到这一点。
最终结果如下:
# A tibble: 9 × 4
# Groups: x, y [5]
x y var n n_perc
<chr> <dbl> <chr> <int> <dbl>
1 a 0 inf 1 0.5
2 a 0 med 1 0.5
3 a 1 med 1 0.33
4 a 1 sup 2 0.66
5 b 0 inf 1 ...
6 b 0 sup 1
7 b 1 med 1
8 c 0 inf 1
9 c 0 med 1
这是一个包含示例数据帧的更正版本的代表。它将您的值舍入为 2dp,但请注意 n_perc 的第四个值舍入为 0.67,而不是您的示例输出中的 0.66:
library(dplyr)
# Your corrected dataframe
df1 <- data.frame(x = c("a","a","b","a","b","c","a","c","a","b"),
y = c(0,1,0,1,1,0,1,0,0,0),
var = c("inf", "med", "inf", "sup", "med",
"med", "sup", "inf", "med", "sup"))
conta_var <- df1 %>%
group_by(x, y) %>%
count(var) %>%
mutate(n_perc = signif(n / sum(n), 2)) %>%
ungroup()
conta_var
# A tibble: 9 × 5
x y var n n_perc
<chr> <dbl> <chr> <int> <dbl>
1 a 0 inf 1 0.5
2 a 0 med 1 0.5
3 a 1 med 1 0.33
4 a 1 sup 2 0.67
5 b 0 inf 1 0.5
6 b 0 sup 1 0.5
7 b 1 med 1 1
8 c 0 inf 1 0.5
9 c 0 med 1 0.5