【发布时间】:2018-01-02 16:19:14
【问题描述】:
首先,一些示例数据:
location <- c("A","B","C","D","E")
mat <- as.data.frame(matrix(runif(1825),nrow=5,ncol=365))
t1<- c(258,265,306,355)
t2<- c(258,270,302,352)
t3<- c(258,275,310,353)
t4<- c(258,280,303,355)
t5<- c(258,285,312,356)
ts<-rbind(t1,t2,t3,t4,t5)
dat <-as.data.frame(cbind(location,mat,ts))
names(dat)[367:370] <- c("pl","vg","re","me")
location 是网站的名称。 V1 到 V365 是每日降雨量(V1 为
一年的第一天)。我想做的是:
对于每一行 (location),我想根据最后一行生成三个降雨值
四列pl,vg,re,me(指定一年中的日子)
例如,对于位置A,最后四列是:
pl = 258
vg = 265
re = 306
me= 355
因此,对于位置A,我想生成三个降雨量值,它们是来自以下的降雨量之和:
V258 到 V264
V265 到 V305 和
V306 到 V355
并为所有五个位置执行此操作。
我所做的是:
for(j in unique(dat$location)){
loc <- dat[dat$location == j,]
pl.val <- loc$pl + 1 # have to add + 1 since the rainfall starts from the second column
vg.val <- loc$vg + 1
re.val <- loc$re + 1
me.val <- loc$me + 1
rain1 <- sum(loc[,pl.val:vg.val])
rain2 <- sum(loc[,(vg.val+ 1):re.val])
rain3 <- sum(loc[,(re.val + 1):me.val])
}
我想避免使用for 循环并改用apply 函数。不过,我是
不熟悉如何使用apply函数对所有行进行计算
(位置)一口气。谁能告诉我该怎么做?
谢谢
编辑
如果我有一个降雨值为 NA 且其他日期为 NA 的位置,我该如何修改以下被接受为答案的代码。这是示例数据
location <- c("A","B","C")
mat <- as.data.frame(matrix(runif(365*3),nrow=3,ncol=365))
t1<- c(258,265,306,355)
t2<- c(258,NA,NA,NA)
t3<- c(258,275,310,353)
ts<-rbind(t1,t2,t3)
dat <-as.data.frame(cbind(location,mat,ts))
names(dat)[367:370] <- c("pl","vg","re","me")
dat[2,-c( 367:370)] <- NA
【问题讨论】: