这当然是一个基本问题,但我自己无法弄明白。请考虑以下事项:
在具有长格式患者特征的大型数据集中,我想总结一些变量。我更愿意使用dplyr
。
对于示例数据集:
db <- data.frame(ID = c(rep(1, 3), rep(2,4), rep(3, 2)),
Gender = factor(c(rep("woman", 7), rep("man", 2))),
Grade = c(rep(3, 3), rep(1, 4), rep(2, 2)))
db
# ID Gender Grade
# 1 1 woman 3
# 2 1 woman 3
# 3 1 woman 3
# 4 2 woman 1
# 5 2 woman 1
# 6 2 woman 1
# 7 2 woman 1
# 8 3 man 2
# 9 3 man 2
我想为Gender
和Grade
制作频率表。显然,有2名女性患者和1名男性。每个等级(1:3)出现一次。
我试过了:
x <- db %>% group_by(ID, Gender, Grade)
table(y$Gender)
x
# A tibble: 9 x 3
# Groups: ID, Gender, Grade [3]
# ID Gender Grade
# <dbl> <fct> <dbl>
# 1 1. woman 3.
# 2 1. woman 3.
# 3 1. woman 3.
# 4 2. woman 1.
# 5 2. woman 1.
# 6 2. woman 1.
# 7 2. woman 1.
# 8 3. man 2.
# 9 3. man 2.
但是当我打电话给table(x$Gender)
时,结果是:
table(y$Gender)
# man woman
# 2 7
我做错了什么?
提前多多感谢!
编辑:所需的输出是有一个频率表,其中包含数据集中有多少男性/女性参与者,以及有多少患者有1,2,3等等。请参阅下文。
以下我可以在db中调用女性的百分比:
db %>%
summarise(pct.female = mean(Gender == "woman", na.rm = T))
# pct.female
# 1 0.7777778
我宁愿需要的是男性/女性(n)的数量。像这样:
# man woman
# 1 2
答案 0 :(得分:2)
require(dplyr)
require(magrittr)
db %>% count(ID, Gender) %$% table(Gender)
或者,没有dplyr
require(magrittr)
db %$% split(Gender, ID) %>% sapply(unique) %>% table
答案 1 :(得分:2)
require(dplyr)
db %>% group_by(Gender, Grade) %>% tally()
# A tibble: 3 x 3
# Groups: Gender [?]
Gender Grade n
<fct> <dbl> <int>
1 man 2.00 2
2 woman 1.00 4
3 woman 3.00 3
# Was also suggested by @konvas in their comment.
会告诉您性别和成绩的所有独特组合。每个存在多少个。这个你想要的?很难从你的问题说。期望的输出会很好。
修改强> 或者,根据要求的输出:
db %>% distinct(ID, Gender) %>% count(Gender)
# A tibble: 2 x 2
Gender `n()`
<fct> <int>
1 man 1
2 woman 2