由于行数差异而出现错误

时间:2020-06-02 18:02:01

标签: r ggplot2

我不断收到此错误代码“ [<-.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")

1 个答案:

答案 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 ..

相关问题