内容简介:翻译自:https://stackoverflow.com/questions/32325858/r-table-function-how-to-sum-instead-of-counting
参见英文答案 > How to sum a variable by group? 10个
假设我在R表中有数据,如下所示:
Id Name Price sales Profit Month Category Mode 1 A 2 5 8 1 X K 1 A 2 6 9 2 X K 1 A 2 5 8 3 X K 1 B 2 4 6 1 Y L 1 B 2 3 4 2 Y L 1 B 2 5 7 3 Y L 2 C 2 5 11 1 X M 2 C 2 5 11 2 X L 2 C 2 5 11 3 X K 2 D 2 8 10 1 Y M 2 D 2 8 10 2 Y K 2 D 2 5 7 3 Y K 3 E 2 5 9 1 Y M 3 E 2 5 9 2 Y L 3 E 2 5 9 3 Y M 3 F 2 4 7 1 Z M 3 F 2 5 8 2 Z L 3 F 2 5 8 3 Z M
如果我对这些数据使用表函数,例如:
table(df$Category, df$Mode)
它会告诉我每种模式下哪个类别有多少观察.这就像计算每种模式下每个类别中的项目数量.
但是,如果我希望表格显示在每个类别下哪个模式获得了多少利润(总和或平均值)而不是总数呢?
是否有任何方法可以使用表函数或R中的其他函数?
我们可以使用基数为R的xtabs.默认情况下,xtabs得到总和
xtabs(Profit~Category+Mode, df) # Mode #Category K L M # X 36 11 11 # Y 17 26 28 # Z 0 8 15
或者另一个更灵活地应用不同FUN的基本R选项是tapply.
with(df, tapply(Profit, list(Category, Mode), FUN=sum)) # K L M #X 36 11 11 #Y 17 26 28 #Z NA 8 15
或者我们可以使用dcast从’long’格式转换为’wide’格式.它更灵活,因为我们可以将fun.aggregate指定为sum,mean,median等.
library(reshape2) dcast(df, Category~Mode, value.var='Profit', sum) # Category K L M #1 X 36 11 11 #2 Y 17 26 28 #3 Z 0 8 15
如果你需要’long’格式,这里有一个data.table选项.我们将’data.frame’转换为’data.table'(setDT(df)),按’Category’和’Mode’分组,得到’Profit’的总和.
library(data.table) setDT(df)[, list(Profit= sum(Profit)) , by = .(Category, Mode)]
翻译自:https://stackoverflow.com/questions/32325858/r-table-function-how-to-sum-instead-of-counting
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- mongodb如何实现数组对象求和
- Leetcode 67:Add Binary(二进制求和)
- FreeCodeCamp 中级算法题 - 斐波那契数列奇数项求和
- 哈希算法、爱因斯坦求和约定,这是2020年的注意力机制
- Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)
- Python 函数调用&定义函数&函数参数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图片转BASE64编码
在线图片转Base64编码工具
Base64 编码/解码
Base64 编码/解码