我不断收到此错误代码“ [<-.data.frame
(*tmp*
中的错误,x,值= c(16100,14800,13100,:
替换有163行,数据有182“,我不确定如何解决此问题。我知道它与NA有关,但是我尝试了na.omit并无法使其正常工作。我已经尝试过更改dischange.data矩阵中的行数,但这也不起作用。请帮忙!
library(waterData)
## List of start dates
start.dates <- c(
"2009-12-01", "2010-12-01", "2011-12-01", "2012-12-01",
"2013-12-01", "2014-12-01", "2015-12-01", "2016-12-01",
"2017-12-01", "2018-12-01")
## List of end dates
end.dates <- c(
"2010-05-31", "2011-05-31", "2012-05-30", "2013-05-31",
"2014-05-31", "2015-05-31", "2016-05-30", "2017-05-31",
"2018-05-31", "2019-05-31")
## Bind start and end dates into a single dataframe
flow.dates <- as.data.frame(cbind(start.dates, end.dates))
## Empty dataframe for discharge data; nrow=no of days in each inverval,
#ncol=no invtervals
discharge.data <- as.data.frame(data.frame(matrix(0,
nrow = 182, ncol = 10)))
## Append data for all dates
for(x in 1:10){
bin.1 <- importDVs(staid = "02198375", code = "00060", stat = "00003",
sdate = flow.dates[x, 1],
edate = flow.dates[x, 2])
bin.2 <- cleanUp(bin.1, task = "fix", replace = 0.001)
bin.3 <- fillMiss(bin.1, block = 2, pmiss = 5, model = "trend",
smooth = FALSE, log = "y")
bin.4 <- bin.3[, c(2, 3)]
colnames(bin.4) <- c(flow.dates[x, 3])
discharge.data[, x] <- bin.4[, 1]
}
## Calculate season mean & convert from ft3 to m3
mean.discharge.ws <- sapply(discharge.data, mean)
met.shift.ws <- (mean.discharge.ws / 35.315)
## Create dataframe
met.winterspring.Year <- c( 2010, 2011, 2012, 2013, 2014,
2015, 2016, 2017, 2018, 2019)
df=data.frame(met.shift.ws, met.winterspring.Year)
my.formula = df$met.shift.ws ~ df$met.winterspring.Year
fit = lm(met.winterspring.Year ~ met.shift.ws ,data=df )
summary(fit)
library(ggplot2)
library(ggpmisc) # for dealing with stat equations
library (grid)
ggplot(df, aes(met.winterspring.Year, met.shift.ws)) +
geom_line(group=1) +
geom_smooth(method = "lm", se=FALSE) +
stat_poly_eq(formula = my.formula,
eq.with.lhs = "italic(hat(y))~`=`~",
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE)+
theme_classic()+
labs(x="", y=(expression(Discharge~(m^{3}~s^{-1}))))+
theme_classic() +
scale_x_continuous(breaks = breaks_width(2)) +
annotate(geom = "text", x = 2017, y = 300, label = "Winter-Spring", hjust = "left")
答案 0 :(得分:0)
我不知道什么是water.data或函数的一半,但是我很快下载了该软件包,并且如果您在for循环中添加print(x)
,并在其中添加所有日期的数据,我会立即看到对于x=7
,bin.1中有163行,而不是182行。我不知道这是什么意思,但是如果只是考虑其中1:182只是一个用于保存值的行,如果要附加的向量的长度太小,则可以填充一些NA。所以也许像
discharge.data <- as.data.frame(data.frame(matrix(0,
nrow = 182, ncol = 10)))
## Append data for all dates
for(x in 1:10){
bin.1 <- importDVs(staid = "02198375", code = "00060", stat = "00003",
sdate = flow.dates[x, 1],
edate = flow.dates[x, 2])
bin.2 <- cleanUp(bin.1, task = "fix", replace = 0.001)
bin.3 <- fillMiss(bin.1, block = 2, pmiss = 5, model = "trend",
smooth = FALSE, log = "y")
bin.4 <- bin.3[, c(2, 3)]
colnames(bin.4) <- c(flow.dates[x, 3])
#pad some NAs if too short vector
vec = bin.4[,1]
len = length(vec)
if (len < 182) {
vec = c(vec,rep(NA,182-len))
}
discharge.data[, x] <- vec
}
这应该有效。如果要附加的data.frame还有我不了解的其他条件,那么您可能应该使用merge
..