相关疑难解决方法(0)

快速/优雅的方法来构建均值/方差汇总表

我可以完成这个任务,但我觉得必须有一个"最好的"(最简洁,最紧凑,最清晰的代码,最快?)的方式,到目前为止还没有弄清楚...

对于一组指定的分类因素,我想按组构建均值和方差表.

生成数据:

set.seed(1001)
d <- expand.grid(f1=LETTERS[1:3],f2=letters[1:3],
                 f3=factor(as.character(as.roman(1:3))),rep=1:4)
d$y <- runif(nrow(d))
d$z <- rnorm(nrow(d))
Run Code Online (Sandbox Code Playgroud)

期望的输出:

  f1 f2  f3    y.mean      y.var
1  A  a   I 0.6502307 0.09537958
2  A  a  II 0.4876630 0.11079670
3  A  a III 0.3102926 0.20280568
4  A  b   I 0.3914084 0.05869310
5  A  b  II 0.5257355 0.21863126
6  A  b III 0.3356860 0.07943314
... etc. ...
Run Code Online (Sandbox Code Playgroud)

使用aggregate/ merge:

library(reshape)
m1 <- aggregate(y~f1*f2*f3,data=d,FUN=mean)
m2 <- aggregate(y~f1*f2*f3,data=d,FUN=var)
mvtab <- merge(rename(m1,c(y="y.mean")),
      rename(m2,c(y="y.var")))
Run Code Online (Sandbox Code Playgroud)

使用ddply/ …

aggregate r plyr reshape2

21
推荐指数
5
解决办法
1万
查看次数

在r中的数据框中连续按年求和

我有一个包含两列(年份和降水)的数据框。在单列中,年份被列出,从 1900 年开始,到 2014 年结束,再次从 1900 年开始。在另一列中,我有相应年份的降水值。现在我想将 1900 年的所有降水量添加为 1 个值,将 1901 年的所有降水量添加为 1 到 2014 年。我的数据如下所示:

Year    Precipitation

1900    4.826
1901    37.592
2014    14.224
1900    45.974
1901    46.228
2014    79.502
1900    52.578
1901    22.30
2014    15.25
Run Code Online (Sandbox Code Playgroud)

结果应如下所示:

Year   Precipitation

1900   103.378
1901   106.12
2014   108.976
Run Code Online (Sandbox Code Playgroud)

到目前为止我写了一个代码但它不起作用,如果有人可以修复它吗?

data=read.table('precipitation.csv',header=T,sep=',')
frame=data.frame(data)
cumcum=tapply(frame$Precipitation, cumsum(frame$year==1), FUN=sum, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

谢谢

r

5
推荐指数
1
解决办法
5052
查看次数

通过获取总和来聚合重复的行

继我的问题之后:
1.确定一组变量是否唯一地标识数据的每一行;
2. 根据给定的变量集标记所有重复的行,
我现在想通过获取它们的总和,根据给定的变量集合来汇总/合并所有重复的行.

解决方案1:

关于如何在这里执行此操作有一些指导,但是当存在构成索引的大量变量级别时,ddply推荐的方法很慢,因为在我尝试标记所有重复项的情况下通过一组给定的变量.

# Values of (f1, f2, f3, f4) uniquely identify observations
dfUnique = expand.grid(f1 = factor(1:16),
                       f2 = factor(1:41),
                       f3 = factor(1:2),
                       f4 = factor(1:104))

# sample some extra rows and rbind them
dfDup = rbind(dfUnique, dfUnique[sample(1:nrow(dfUnique), 100), ])

# dummy data 
dfDup$data = rnorm(nrow(dfDup))

# aggregate the duplicate rows by taking the sum
dfDupAgg = ddply(dfDup, .(f1, f2, f3, f4), summarise, data = sum(data))
Run Code Online (Sandbox Code Playgroud)

解决方案2:

第二个解决方案是使用data.table,并遵循 …

r plyr data.table

4
推荐指数
1
解决办法
2598
查看次数

按变量中的共享值聚合行

我有一个有点愚蠢的问题.如果我有一个矩阵(或数据框,哪个更容易使用),如:

Year  Match
2008   1808
2008 137088
2008      1
2008  56846
2007   2704
2007 169876
2007  75750
2006   2639
2006 193990
2006      2
Run Code Online (Sandbox Code Playgroud)

而且我想总结这些年来的每一场比赛(所以,例如,2008年的比赛是这样的,2008 195743我将如何做到这一点?我脑子里有一些解决方案,但它们都是不必要的复杂和R趋势有一些更简单的解决方案隐藏在某个地方.

您可以使用以下内容生成相同的矩阵:

structure(c(2008L, 2008L, 2008L, 2008L, 2007L, 2007L, 2007L, 
2006L, 2006L, 2006L, 1808L, 137088L, 1L, 56846L, 2704L, 169876L, 
75750L, 2639L, 193990L, 2L), .Dim = c(10L, 2L), .Dimnames = list(
NULL, c("Year", "Match")))
Run Code Online (Sandbox Code Playgroud)

谢谢你尽你所能的帮助.

aggregate r plyr

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

r ×4

plyr ×3

aggregate ×2

data.table ×1

reshape2 ×1