【发布时间】:2016-02-10 21:01:58
【问题描述】:
我正在尝试使用 R 中的循环来估计值,这些值将根据与我最后一个值相乘的变化率(“率”)来替换我的数据帧中的 NA(好吧,这很令人困惑,但请参考到下面的例子)。这与我的数据类似:
l1 <- c(NA,NA,NA,27,31,0.5)
l2 <- c(NA,8,12,28,39,0.5)
l3 <- c(NA,NA,NA,NA,39,0.3)
l4 <- c(NA,NA,11,15,31,0.2)
l5 <- c(NA,NA,NA,NA,51,0.9)
data <- as.data.frame(rbind(l1,l2,l3,l4,l5))
colnames(data) <- c("dbh1","dbh2","dbh3","dbh4","dbh5","rate")
所以我创建了一个循环来识别每行中的第一个 no-NA 值,然后使用该值根据“速率”估计其先前的值。例如,在第 1 行中,第一个 NA 值将替换为 "27-(0.5*3)",然后第二个将替换为 "27-(0.5*2) " 和第三个 "27-(0.5*1)"。这是我想出的循环。我知道第一部分(外部循环)有效,但内部无效:
for (i in 1: nrow(data)) {
dbh.cols <- data3[i,c("dbh1","dbh2","dbh3","dbh4","dbh5")]
sample.year <- which(dbh.cols != "NA")
data$first.dbh[i] <- min(dbh.cols, na.rm = T)
data$first.index[i] <- min(sample.year)
for (j on 1: (min(sample.year)-1)) {
ifelse(is.na(data[i,j]), min(dbh.cols, na.rm = T) - (min(sample.year)-j)*rate[i,j], data[i,j])
}
}
我不擅长编程,所以可能我的“ifelse”内部循环策略太奇怪(而且错误),但我就是想不出其他可以在这里工作的东西......有什么建议吗?
【问题讨论】:
标签: r loops time-series na