在使用mutate内部的函数时,请使用na.rm=TRUE。

3
我正在尝试计算累加和,并使用mutate创建新列。我正在对多个列进行此操作,每个列都有不同位置的缺失数据。
day    water    nitrogen
 1      4        5
 2      NA       6
 3      3        NA
 4      7        NA
 5      2        9
 6      NA       3
 7      2        NA
 8      NA       2
 9      7        NA
10      4        3

我尝试

mutate(df, sumwater = cumsum(water))%>%
mutate(sumnitrogen = cumsum(nitrogen)) 

或者

mutate(df, sumwater = cumsum(water, na.rm = TRUE))%>%
mutate(sumnitrogen = cumsum(nitrogen, na.rm = TRUE))

两者都不起作用。我知道我们可以在summarize函数中使用na.rm=TRUE。有没有办法让它在mutate中起作用?我更喜欢dplyr的答案,因为实际上这是一个长管道链的一部分。


1
虽然不是特定于dplyr的,但这里有关于cumsumNA的好答案。链接 - aosmith
1
cumsum没有na.rm参数,这不是dplyr特有的问题。请参阅?cumsum获取其文档。 - Frank
2
你也可以这样做:df %>% mutate(sumwater = cumsum(replace(water, is.na(water), 0)), sumnitrogen = cumsum(replace(nitrogen, is.na(nitrogen), 0))) - David Arenburg
2个回答

5

您需要选择一个替换NA的值。您可以选择零。但是,如果这些是真正的NA,则平均替换似乎更有意义(或者甚至是几何平均数,如果值严格大于0)

detach("package:dplyr")
library(plyr)
library(dplyr)

mutate(df, sumwater = water %>% mapvalues(NA, 0) %>% cumsum)

mutate(df, sumwater = water %>% mapvalues(NA, mean(water) ) %>% cumsum)

你重复了 plyr。 - Frank
糟糕,出错了。在加载 dplyr 之前一定要确保先加载 plyr。 - bramtayl

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接