【发布时间】:2020-05-19 17:43:32
【问题描述】:
我有三个气象站来为每个注册的变量创建一个气象数据寄存器和数据帧。例如:
HR 是包含三个站的注册相对湿度数据的数据帧,而 feed 是应保存每个变量的加权平均值的数据帧。在这种情况下,我只将该函数应用于相对湿度,以填充 Feed 数据框中的第二列。
HR<-data.frame(M5125=c(70,75,NA,NA),
M5126=c(73,NA,NA,71.5),
PRAA=c(NA,NA,NA,NA))
precip<-data.frame(M5125=c(16,NA,11,NA),
M5126=c(7,NA,NA,13),
PRAA=c(15,NA,NA,NA))
>HR
. M5125 M5126 PRAA
[1,] 70 73 NA
[2,] 75 NA NA
[3,] NA NA NA
[4,] NA 71.5 NA
daily<-c('2015-10-11','2015-10-12','2015-10-13','2015-10-14')
feed<-data.frame(daily,HR_percent=NA,precip_mm=NA)
我想用加权平均值填充单个数据框,但每个站点的不同日期都有一些 NA。所以我创建了一个函数来根据情况填充它。
WAM<-data.frame(STATIONS=c('M5125','M5126','PRAA'),
WEIGHT=c(5,2,1.6))
wamFunction<-function(MV,col){
for (r in 1:nrow(feed)) {
feed[r,col]<-weighted.mean(MV[r,],WAM[,2],na.rm = T)
}
}
mapply(wamFunction,HR,2)
mapply(wamFunction,precip,3)
该函数应根据每个站点的可用性数据向单元格返回加权平均值
这是返回的错误:
[.default(MV, v, 2) 中的错误:尺寸编号错误
【问题讨论】:
-
数据框 Feed 和 HR 的行数相同
-
你能用文字描述一下你在做什么吗?我认为使用
weighted.mean函数(它有一个na.rm参数)可能有一种更简单的方法。但是我很困惑,您的feed样本数据似乎没有STATION信息,而且我不知道您显示的HR数据适合的位置。任何机会您都可以分享几行样本数据使其可重现? -
dput()是一种以复制/粘贴方式共享一些数据的简单方法,例如,dput(feed[1:10, ])用于feed数据的前 10 行。 -
当然,@GregorThomas。 HR 是包含三个站点的注册相对湿度数据的数据帧,而 feed 是应该为每个变量保存加权平均值的数据帧。在这种情况下,我只将该函数应用于相对湿度以填充馈送数据框中的第二列。
-
@GregorThomas,我尝试使用 weighted.mean 函数。它仅使用循环工作,但不能在函数内部使用。如果我有一个函数将其应用于每个变量的数据框会更好。 wamFunction
标签: r function loops dataframe