我试图将一个因子的每个级别的数字列的值求和,但还要得到结果数据框中所有级别的总和。

例如:

# Type gender population
# A    male      100
# B    male      150
# A    female    125
# B    female    175

使用聚合函数,我可以获得:
aggregate(population ~ gender, df, sum)

# gender population
# male      250
# female    300

但是有没有办法得到同时将两个水平相加的输出?
# gender population
# all       550
# male      250
# female    300

可以使用proc tabulate在SAS中轻松完成此操作,希望也可以使用R来实现。

提前致谢,

编辑
给出的两个答案都行得通,但是我正在尝试找到一种不那么特别的解决方案。我正在寻找可以在多个变量上使用的东西,例如对于更复杂的数据框的输出如下:
# Type gender population
# all  all     500
# all  male    200
# all  female  300
# A    all     250
# A    male    100
# A    female  150
# B    all     250
# B    male    100
# B    female  150

如果这还不够清楚,我表示歉意。

最佳答案

我们可以将xtabs与addmargins结合使用以获得总计:

df1 <- read.table(text = "
Type gender population
A    male      100
B    male      150
A    female    125
B    female    175", header = TRUE, stringsAsFactors = FALSE)

df2 <- read.table(text = "
Type gender population
all  all     500
all  male    200
all  female  300
A    all     250
A    male    100
A    female  150
B    all     250
B    male    100
B    female  150", header = TRUE, stringsAsFactors = FALSE)

data.frame(addmargins(xtabs(population ~ gender, df1)))
#   gender Freq
# 1 female  300
# 2   male  250
# 3    Sum  550

data.frame(addmargins(xtabs(population ~ gender, df2)))
#   gender Freq
# 1    all 1000
# 2 female  600
# 3   male  400
# 4    Sum 2000

关于r - 按要素水平汇总,也总计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54129152/

10-12 17:18
查看更多