我如何生成一列来表明班上男生的比例?

问题描述 投票:0回答:2

我如何生成一列来表明班上男学生的比例?我有一张看起来像这样的桌子。

df <- “class    id  score   year    gender
A   100 90  2000    F
A   101 80  2001    M
A   102 90  2002    M
A   102 90  2003    M
A   100 96  2003    F
B   103 75  2000    F
B   104 98  2001    M
B   105 78  2002    M
B   103 80  2003    F
B   104 54  2004    M
B   105 98  2005    M
C   106 65  2003    F
C   107 49  2004    F
C   108 38  2005    M
C   108 43  2006    M"

Data <- read.table(text=df, header = TRUE)

我已经尝试过类似的方法。我按年份将其分组,希望它能考虑到学生和年份-换句话说,如果一个学生在两年中的考试成绩不同,则该学生将不被视为两个不同的学生。

Data %>% 
  group_by(class, year) %>% 
  mutate(prop_male = (gender=="M")/sum(gender=="F",gender=="M")) %>%
  arrange(class)

并且我收到以下错误:

Error in UseMethod("group_by_") : 
  no applicable method for 'group_by_' applied to an object of class "function"
r dplyr percentage
2个回答
0
投票

尝试以下代码:

Data %>% 
  mutate(prop_male = (gender=="M")/sum(gender=="F",gender=="M")) %>%
  group_by(class, year) %>% 
  arrange(class)

0
投票

在基数R中,我们可以将prop.tabletable结合使用以获取比例

prop.table(table(Data$class, Data$gender), 1)

#         F      M
#  A 0.4000 0.6000
#  B 0.3333 0.6667
#  C 0.5000 0.5000

如果只需要“男”学生的值,则可以将其子集

prop.table(table(Data$class, Data$gender), 1)[, "M"]
#     A      B      C 
#0.6000 0.6667 0.5000 
© www.soinside.com 2019 - 2024. All rights reserved.