R按向量和日期重复行

R按向量和日期重复行,r,R,我有一个包含275个不同台站和43年季节性数据(10月至次年4月)的数据框架,不需要5月至9月的数据和6个变量,下面是一个仅包含一个称为值的变量的数据框架的小示例: data <- data.frame(station=rep(1,6), year=rep(1969,6), month=c(10,10,10,10,11,11),day=c(1,8,16,24,1,9),value=c(1:6)) 我需要的是用daily dateeg:1:8来填补一天中的空白,并且每行的值是8天的平

我有一个包含275个不同台站和43年季节性数据(10月至次年4月)的数据框架,不需要5月至9月的数据和6个变量,下面是一个仅包含一个称为值的变量的数据框架的小示例:

data <- data.frame(station=rep(1,6), year=rep(1969,6), month=c(10,10,10,10,11,11),day=c(1,8,16,24,1,9),value=c(1:6))   
我需要的是用daily dateeg:1:8来填补一天中的空白,并且每行的值是8天的平均值,它将如下所示:

data1 <- data.frame(station=rep(1,40), year=rep(1969,40), month=c(rep(10,31),rep(11,9)),day=c(1:31,1:9),value=rep(c(1/7,2/8,3/8,4/8,5/8,6/8),c(7,8,8,8,8,1)))    
我写了一些糟糕的代码,在网站上到处搜索,但不幸的是没有成功,请帮助或更好的想法将不胜感激

station.date <- as.Date(with(data, paste(year, month, day, sep="-")))
for (i in 1:length(station.date)){
  days <- as.numeric(station.date[i+1]-station.date[i])   #not working
  data <- within(data, days <- c(days,1))  
} 
rows <- rep(1:nrow(data), times=data[ ,data$days])
rows <- ifelse(rows > 10, 0, rows)     #get rid of month May to Sept
data <- data[rows, ] 
data <- within(data, value1 <- value/days)       
data <- within(data, dd <- ?)    #don't know to change the repeated days to real days

我编写了一些代码,这些代码的功能与您的示例相同,但为了处理整个数据集,您可能必须对其进行修改。我不知道如何处理最后的观察结果。最后我为它做了一个特殊的案例。如果它应该除以不同的数字,您只需要替换8个内部值
data <- data.frame(station=rep(1,6), year=rep(1969,6), month=c(10,10,10,10,11,11),day=c(1,8,16,24,1,9),value=c(1:6)) 

station.date <- as.Date(with(data, paste(year, month, day, sep="-")))
d <- as.numeric(diff(station.date))
range <- sum(d) + 1

# create dates
dates <- seq(station.date[1], by = "day", length = range)

# create values
values <- unlist(sapply(1:length(d), function(i){
   rep(data$value[i] / d[i] , d[i])
}))
# adding last observation
values <- c(values, tail(data$value, 1) / 8)

# create new data frame
data2 <- data.frame(station = rep(1, range), 
                    year = as.numeric(format(dates, "%Y")),
                    month = as.numeric(format(dates, "%m")),
                    day = as.numeric(format(dates, "%d")),
                    value = values)