我如何生成一列来指示班上男学生的比例?

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

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"
w910488011 回答:我如何生成一列来指示班上男学生的比例?

尝试以下代码:

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

在基数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,1)[,"M"]
#     A      B      C 
#0.6000 0.6667 0.5000 

使用dplyr,我们可以group_by Class并计算比例。

library(dplyr)
Data %>%  group_by(class) %>% summarise(perc = mean(gender == "M"))

#  class  perc
#  <fct> <dbl>
#1 A     0.6  
#2 B     0.667
#3 C     0.5  
本文链接:https://www.f2er.com/3084300.html

大家都在问