R 比较ddply函数中的两个数据帧
我有两个数据帧,R 比较ddply函数中的两个数据帧,r,plyr,R,Plyr,我有两个数据帧,数据和分位数数据的维度为23011 x 2,由列“年”和“数据”组成,其中年份是从1951年到2013年的天数序列。分位数df的维度为63x2由列“年”和“分位数”组成,其中年为63行,即1951:2013 我需要将分位数df与数据df进行比较,并计算每年超过分位数值的数据值总和。为此,我以如下方式使用ddply: ddply(data, .(year), function(y) sum(y[which(y[,2] > quantile[,2]),2]) ) 但是,代码仅
数据
和分位数
<代码>数据的维度为23011 x 2
,由列“年”
和“数据”
组成,其中年份是从1951年到2013年的天数序列。分位数
df的维度为63x2
由列“年”
和“分位数”
组成,其中年为63行,即1951:2013
我需要将分位数
df与数据
df进行比较,并计算每年超过分位数值的数据值总和。为此,我以如下方式使用ddply
:
ddply(data, .(year), function(y) sum(y[which(y[,2] > quantile[,2]),2]) )
但是,代码仅与第一行分位数进行比较,而不是每年对数据df进行迭代。
我想每年迭代分位数
df,并计算每年超过分位数
df的数据总和
任何帮助都将不胜感激
例如问题-
分位数
df为
而数据
是
分位数
df来自数据
,它是超过值1的第90个百分位数据
df
quantile = quantile(data[-c(which(prcp2[,2] < 1)),x],0.9)})
分位数=分位数(数据[-c(其中(prcp2[,2]<1)),x],0.9)})
为什么不一次完成呢?首先创建
分位数
-数据帧,然后再引用它,这会使事情变得更加复杂。你也可以用ddply做这个
set.seed(1)
data <- data.frame(
year=sample(1951:2013,23011,replace=T),
data=rnorm(23011)
)
res <- ddply(data,.(year), function(x){
return(sum(x$data[x$data>quantile(x$data,.9)]))
})
set.seed(1)
数据%摘要(
测试=总和(值[值>分位数(值,.9)])
)
除了上面的Heroka答案之外,如果您有10000列,并且需要迭代每一列,那么您可以在此表单中使用矩阵表示法-
lapply(x, function(y) {ddply(data,.(year), function(x){ return(sum(x[x[,y] > quantile(x[x[,y]>1,y],0.9),y]))})})
其中,x
是列的大小,即,1:1000
和data
是包含数据的df。
分位数(x[x[,y]>1,y],0.9),y])
将给出超过1
的数据值的第90个百分位数。
x[x[,y]>分位数(x[x[,y]>1,y],0.9),y]
返回满足yth
列条件的行,并且sum
函数用于计算和。您好,请提供一个。“分位数”——数据来自原始数据还是来自外部数据?谢谢Heroka的回答。成功了。但是,您忽略了一个条件,分位数
df应该大于1。不过,我提出了条件,它给出了预期的答案。详细的答案将被公布,以帮助其他人。再次感谢。
lapply(x, function(y) {ddply(data,.(year), function(x){ return(sum(x[x[,y] > quantile(x[x[,y]>1,y],0.9),y]))})})