r - 在R中的每一天根据每个组取平均值
问题描述
我有一个加密货币返回值的数据框,每个都根据价格分为一组 5 个(数据框有 1,847,012 个条目)
2014-01-02 XRP 0.064041998 1
2014-01-02 Dogecoin -0.220306670 1
2014-01-02 FLO 0.043457042 1
2014-01-02 CasinoCoin -0.080614279 2
2014-01-02 Nxt 0.048375563 2
2014-01-02 Quark 0.004495892 2
2014-01-02 Feathercoin 0.218078384 3
2014-01-02 Diamond 0.052490183 3
2014-01-02 Unobtanium -0.107420249 4
2014-01-02 Peercoin 0.263435789 4
2014-01-02 Primecoin 0.230874782 4
2014-01-02 Bitcoin 0.039387728 5
2014-01-02 Litecoin 0.045263780 5
2014-01-02 Namecoin 0.318292245 5
2014-01-02 Ethereum NA NA
... ... ... ...
2014-01-03 XRP -0.03900908 1
2014-01-03 Dogecoin -0.15273525 1
2014-01-03 FLO 0.02397348 1
2014-01-03 CasinoCoin 0.05748349 2
... ... ... ...
日期到 2019-12-31(如果当时不存在代币,则某些值不可用,例如 2014 年的以太坊)。
我想要做的是创建一个表格,每天取每个组的平均值,所以
2014-01-02 2014-01-03 2014-01-04 ...
1 mean(group 1) mean(group 1)
2 mean(group 2) mean(group 2)
3 mean(group 3) mean(group 3)
4 mean(group 4) mean(group 4)
5 mean(group 5) mean(group 5)
我试图查找并发现聚合/汇总每个组的多个变量(例如总和,平均值) 我尝试的是:
means = as.data.frame(aggregate(d$value, list(d$Group), mean, na.rm = TRUE))
但这仅适用于所有日期的每个组,并且总体上给了我 5 个值,我每天需要 5 个值
Group.1 x
1 -4.920999e-03
2 -3.372798e-03
3 -1.548296e-03
4 -5.959693e-05
5 6.303165e-04
我也尝试过使用data.table
df3 <- setDT(d)[, lapply(.SD, mean), by=.(date, Group), .SDcols=c("date","Group")]
但这无法读取日期
解决方案
关于data.table
方法,我认为你SDcols
错了。
library(data.table)
setDT(d)
d[,date := as.Date(date)]
d[, lapply(.SD, mean, na.rm = TRUE), by= c("date","Group"), .SDcols=c("value")]
如果我理解正确,您希望按date
and分组并group
在列上应用均值value
(如果需要,更改名称)
这为您提供了一个长格式的数据。如果你想要一个宽格式的数据,你可以使用dcast
. 这种味道的东西:
dcast(data_long, Group ~ date)
例子
library(data.table)
d = data.table(date = as.Date(c("2014-01-02", "2014-01-03")),
Group = c('XRP','bitcoin'),
value = c(0.064041998, 1))
data_long <- d[, lapply(.SD, mean, na.rm = TRUE), by= c("date","Group"), .SDcols=c("value")]
data_long
date Group value
1: 2014-01-02 XRP 0.064042
2: 2014-01-03 bitcoin 1.000000
如果你想要宽格式的数据,你可以这样做:
dcast(data_long, Group ~ date)
Group 2014-01-02 2014-01-03
1: XRP 0.064042 NA
2: bitcoin NA 1
推荐阅读
- php - 尝试安装 magento2 时,我没有得到同意并设置 magento
- python - 寻找一个专门的 numpy 函数来避免使用多个列表理解
- javascript - 在实时站点上与 Omdb API 交互的问题
- javascript - 如何在一系列 Google 电子表格中循环
- javascript - 使用 process.argv 的 Javascript 问题
- python - 加载后要打印点,例如打印 3 点和 3 点消失并再次打印 3 点
- javascript - React Paint 仅在 UseEffect 之后执行
- android-studio - 模拟器一切都显示太大
- javascript - 不确定如何正确设置本月过滤器
- jquery - 当前请求不是多部分请求 | 阿贾克斯 | 弹簧靴 | 多部分 | jQuery