我有一个data.frame,有几个树木直径的测量值。我试图做的是计算变量dbh_increase的累积和,这是变异操作的产物(希望我在这里很清楚)。
我的data.frame:https://www.dropbox.com/s/9usbu2kubbdyheu/bddendro.csv?dl=0
以下是我正在运行的整个代码:
bddendro<-read.table("bddendro.csv", h=T, sep = ";", dec = ",")
bddendro$dbh_new<-(bddendro$cbh_init + (bddendro$dendro_length * 0.2))/pi
bddendro<- bddendro %>%
filter(med != 0) %>%
group_by(parc, tree) %>%
mutate(dbh_increase = ifelse(dendro_length < lag(dendro_length), 0 ,dbh_new - lag(dbh_new))) %>%
mutate(dbh_cumsum = cumsum(dbh_increase))
第一个mutate()工作正常,至少在我预期的情况下,第二个不起作用。仅返回NA值
解决方案:
cumsum()不处理NA值,所以我使用mutate()将NAs更改为0,代码如下:
mutate(dbh_increase = ifelse(is.na(dbh_increase), 0, dbh_increase))
答案 0 :(得分:0)
您的第一个mutate()创建了NA值,因为每个(parc,tree)组中的第一行没有滞后(dbh_new)。因此,第二个mutate()中的cumsum()返回所有NAs。
请改为尝试:
bddendro2 <- bddendro %>%
filter(med != 0) %>%
group_by(parc, tree) %>%
arrange(dendro_length) %>%
mutate(dbh_increase = ifelse(is.na(lag(dbh_new)), 0, dbh_new - lag(dbh_new))) %>%
mutate(dbh_cumsum = cumsum(dbh_increase)) %>%
ungroup()