我如何生成一列来表明班上男学生的比例?我有一张看起来像这样的桌子。
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"
尝试以下代码:
Data %>%
mutate(prop_male = (gender=="M")/sum(gender=="F",gender=="M")) %>%
group_by(class, year) %>%
arrange(class)
在基数R中,我们可以将prop.table
与table
结合使用以获取比例
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