Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 比较ddply函数中的两个数据帧_R_Plyr - Fatal编程技术网

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]))})})