r语言 - 当变量A和变量B同时出现时,如何得到变量C出现的频率(count) ?



我有以下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)

最新更新