我有以下dplyr代码:
df3 <- Table3%>%
group_by(Q6,Q9,Q11) %>%
summarise(count = n()) %>%
mutate(per = paste0(round(100 *count/sum(count),2),'%')) %>%
ungroup()
Q6是一个名称,Q9描述了一个主题,可以用于Q6的任何值,Q11是一个Y/N(1/2)问题,如果提到了一个目标。
我不确定我的代码是否正确的解释,我需要因为我不确定总结做什么,或计数时,有3个变量。所以我不知道count是什么变量
summarise(count = n()) %>%
简而言之我想要得到一个目标被提及的频率和百分比,每次Q6和Q9一起出现。我得到这个输出,但我不确定这是否是正确的频率(计数)。
Q6 Q9 Q11 count per
<chr> <chr> <chr> <int> <chr>
1 0 104 2 1 100%
2 0 105 2 1 100%
3 0 22 2 1 100%
4 0 25 2 1 100%
5 0 29 2 1 100%
6 0 30 2 1 100%
7 0 31 1 1 100%
8 0 42 1 1 100%
9 0 44 2 2 66.67%
10 0 44 NA 1 33.33%
11 0 5 1 1 100%
12 0 51 NA 1 100%
13 0 52 1 1 100%
14 0 63 2 1 100%
15 0 7 1 1 100%
16 0 76 1 1 100%
17 0 77 2 1 100%
18 0 83 2 1 100%
19 0 85 2 1 100%
20 0 NA NA 9 100%
21 1 14 1 1 100%
22 1 39 1 1 50%
23 1 39 2 1 50%
24 101 0 1 1 100%
25 101 42 1 1 100%
这是一个超过500行的表,所以我需要按降序排列它们。例如,在下表中,第2行必须表示"当Q9(=44)被提到Q6(=23)时,有8次没有提到目标(Q11=2)。">
第3、4和5行可以解释为:"对于Q6(=52),当提到话题30时,有8个例子提到了目标,但当提到话题89时,有7个例子没有目标,当提到话题29时,有6个例子没有目标。">
百分比让我困惑,我不确定如何解释它,但我需要它。
Q6 Q9 Q11 count per
<chr> <chr> <chr> <int> <chr>
1 0 NA NA 9 100%
2 23 44 2 8 100%
3 52 30 1 8 61.54%
4 52 89 2 7 100%
5 52 29 2 6 66.67%
6 66 63 1 6 54.55%
7 97 30 1 6 60%
8 52 30 2 5 38.46%
9 60 42 2 5 55.56%
10 66 63 2 5 45.45%
11 19 51 2 4 80%
12 19 7 1 4 66.67%
13 24 49 2 4 57.14%
14 52 99 2 4 100%
15 53 41 2 4 100%
16 60 105 2 4 80%
17 60 42 1 4 44.44%
18 97 30 2 4 40%
19 97 60 2 4 100%
20 19 16 2 3 100%
21 24 49 1 3 42.86%
22 272 7 1 3 100%
23 5 46 2 3 100%
24 52 29 1 3 33.33%
25 52 31 1 3 100%
是正确的吗?还是我的数另有含义?
真的很感激帮助的解释,或更好的代码为我正在寻找什么?
谢谢!
n()
返回group_by
中特定组合的案例数。由于您显示了两个不同的输出,我不确定您是如何得到它们的,因此,我不确定如何解释您的%s。
如果没有一个可复制的例子,很难完全帮助你。但如果我做对了,你就走对了路。我只是要注意在不同的组设置中计数。
肯定有一种更聪明的方法,但我将把它分成两步,如下面的代码所示,以免混淆给定不同分组变量的不同计数
library(dplyr)
## Crete some fake data
set.seed(101)
df <-
data.frame("Q6" = sample(8:10, size = 50, replace = TRUE),
"Q9" = round(rnorm(n = 50, mean = 32, sd = 2), digits = 0),
"Q11" = sample(1:2, size = 50, replace = TRUE))
## Then summarise the number of occurrences
## based on combinations of Q6 and Q9
## i.e. how many times that combination of Q6 and Q9 happened
out1 <-
df %>%
group_by(Q6, Q9) %>%
summarise(n_q6_q9 = n())
## Then count the number of Y/N (your Q11) by combinations of Q6 and Q9
## i.e. how many Y or N for each Q6~Q9 combination
out2 <-
df %>%
group_by(Q6, Q9, Q11) %>%
summarise(n_q11 = n())
## Merge them and calculate the percentage
out_final <-
left_join(out2, out1, by = c("Q6", "Q9")) %>% ## Note order of out2 and out1
mutate(per = paste0(round(n_q11/n_q6_q9 * 100, digits = 2), "%"))
# %>% ## Not sure if you need to arrange it?
# group_by(Q6, Q9) %>%
# arrange(per)