- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 plyr(和 R)的新手,正在寻找一些帮助来开始。以棒球数据集为例,我如何计算联赛和球队(lg 和球队)“击球数”的同比(yoy)变化?
library(plyr)
df1 <- aggregate(ab~year+lg+team, FUN=sum, data=baseball)
head(df1)
year lg team ab
1884 UA ALT 108
1997 AL ANA 1703
1998 AL ANA 1502
1999 AL ANA 660
2000 AL ANA 85
2001 AL ANA 219
year lg team ab yoy
1997 AL ANA 1703 NA
1998 AL ANA 1502 -201
1999 AL ANA 660 -842
2000 AL ANA 85 -575
2001 AL ANA 219 134
yoy.func <- function(df) {
lag <- c(df$ab[-1],0)
cur <- c(df$ab[1],0)
df$yoy <- cur -lag
return(df)
}
df2 <- ddply(df1, .(lg, team), yoy.func)
最佳答案
我知道您要求特定于“plyr”的解决方案,但为了分享,这里是基础 R 中的替代方法。在我看来,我发现基础 R 方法“可读”。而且,至少在这种特殊情况下,它要快得多!
output <- within(df1, {
yoy <- ave(ab, team, lg, FUN = function(x) c(NA, diff(x)))
})
head(output)
# year lg team ab yoy
# 1 1884 UA ALT 108 NA
# 2 1997 AL ANA 1703 NA
# 3 1998 AL ANA 1502 -201
# 4 1999 AL ANA 660 -842
# 5 2000 AL ANA 85 -575
# 6 2001 AL ANA 219 134
library(rbenchmark)
benchmark(DDPLY = {
ddply(df1, .(team, lg), mutate ,
yoy = c(NA, diff(ab)))
}, WITHIN = {
within(df1, {
yoy <- ave(ab, team, lg, FUN = function(x) c(NA, diff(x)))
})
}, columns = c("test", "replications", "elapsed",
"relative", "user.self"))
# test replications elapsed relative user.self
# 1 DDPLY 100 10.675 4.974 10.609
# 2 WITHIN 100 2.146 1.000 2.128
data.table
data.table
.即使使用这个示例,您也会发现相对而言有很好的加速。此外,语法非常紧凑,在我看来,易于阅读。
library(plyr)
df1 <- aggregate(ab~year+lg+team, FUN=sum, data=baseball)
library(data.table)
DT <- data.table(df1)
DT
# year lg team ab
# 1: 1884 UA ALT 108
# 2: 1997 AL ANA 1703
# 3: 1998 AL ANA 1502
# 4: 1999 AL ANA 660
# 5: 2000 AL ANA 85
# ---
# 2523: 1895 NL WSN 839
# 2524: 1896 NL WSN 982
# 2525: 1897 NL WSN 1426
# 2526: 1898 NL WSN 1736
# 2527: 1899 NL WSN 787
DT[, yoy := c(NA, diff(ab)), by = "team,lg"]
DT
# year lg team ab yoy
# 1: 1884 UA ALT 108 NA
# 2: 1997 AL ANA 1703 NA
# 3: 1998 AL ANA 1502 -201
# 4: 1999 AL ANA 660 -842
# 5: 2000 AL ANA 85 -575
# ---
# 2523: 1895 NL WSN 839 290
# 2524: 1896 NL WSN 982 143
# 2525: 1897 NL WSN 1426 444
# 2526: 1898 NL WSN 1736 310
# 2527: 1899 NL WSN 787 -949
关于r - 使用 plyr 计算跨组的年同比变化的初学者提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14591147/
是否有一种 Eloquent 方法来使用 ddply() 不仅获得定义的最细粒度组的输出,还获得那些子组的输出? 换句话说,当其中一个分类器是“任何”或“任一”或“无关紧要”时。在两个分组变量的简单情
我正在尝试使用 plyr 计算滚动平均值。数据是行业国家年的数据,对每个行业国家都有重复观察。数据不平衡,但大多数工业国家有大约 15 个观测值。 例如数据如下所示: country IS
我想使用 ddply 函数将相同的函数写入多个列,但我尝试将它们写在一行中,想看看有没有更好的方法来做到这一点? 这是数据的简单版本: data<-data.frame(TYPE=as.integer
我将如何使用 plyr 复制此内容? with(mtcars, tapply(mpg, cyl, summary)) 以同样的优雅,即不详细说明个人统计数据? 最佳答案 library(plyr) d
我有以下数据集(CEU): group x y 1 -23 100 1 -0.90 69.62 1 -0.90 72.03 2 -23
我正在尝试学习如何在 R/plyr 中编写函数。我知道有更简单的方法可以完成我在下面展示的内容,但这不是重点。 在下面的示例中,PLYR 不会向我的新数据框返回新变量 library(plyr) hi
我有一个这样的数据框: mat.in=data.frame(site=c('A','A','A','B','B','B'), var=c('product.A','product.B'
作为学习 plyr 的练习,我尝试对 Rob Hyndman 最近发布的一篇文章做一个 plyr 版本: library(forecast); library(plyr) # Hyndman, R.
我想在一个图上绘制多个时间序列。目前我可以单独绘制它们但不能一起绘制。我怎样才能加入数据,因为年份是按小数分割的。 我基本上想要结束的是这个 Plotting multiple time-series
有没有办法将变量的值分配给 plyr 中的结果列名? 所以在这段代码中... column_name column_names df > # temporal variable > for (c
我是 plyr(和 R)的新手,正在寻找一些帮助来开始。以棒球数据集为例,我如何计算联赛和球队(lg 和球队)“击球数”的同比(yoy)变化? library(plyr) df1 <- aggrega
我使用了plyr 包提供的strip_splits(df) 函数来获取数据框列表。我现在想将数据框列表连接在一起,并添加回用于拆分它们的变量。下面突出显示的文档使我相信这应该是可能的,但是我找不到合适
我正在尝试将一个函数 (weight.func) 传递给另一个调用 ddply 的函数(包装器)。我希望 ddply 使用该函数 (weight.func) 作为其计算的一部分。当 weight.fu
我有一个非常大的数据框,我需要在两列上连接到另一个数据框。我一直在使用 merge 来完成 ir,但 R 内存不足,表越大。是否有使用 dplyr 或 plyr 的类似解决方案?我听说他们需要更少的内
我想为某些数据组合生成相同类型的图表。目前,我正在使用 plyr 来拆分数据并为每个组合执行一些代码。 例如,假设 dataframe 包含公司、部门、地区和收入。这是我的伪代码: d_pl
我喜欢 plyr 将数据帧拆分为多个数据集,然后对每个数据集执行相同操作的能力。最好的部分是当它以整洁紧凑且标记良好的表格的形式向您显示结果时。我喜欢使用 each() 将一堆计算放入一行中。但是,我
基本上我想要一个基于我的群组的自动增量 id 列 - 在这种情况下。(高棉语,剪切) > myDataFrame size kmer cvCut cumsum 1
我无法理解 plyr 包的用法。我尝试使用它来拆分存储在列表中的数据帧,应用函数,将结果存储为数据帧并将数据帧再次组合为列表。 因此,鉴于以下数据: #create test dfs
我以为我有一个非常简单的数据帧转换,但出于某种原因我无法理解它似乎需要永恒,这让我怀疑它可能没有按照我的希望进行。任何人都可以解释一下吗? 第 1 部分 - 将源数据转换为单独的列(实际 df 有 2
我遇到了一个非常不同的问题,在 fullscreen我的模式plyrjs没有向 fullscreen 播放视频 我试图重现 问题 中的代码相同密码笔 但它适用于 密码笔 为什么?。 问题:为什么相同的
我是一名优秀的程序员,十分优秀!