簡體   English   中英

使用na.rm = TRUE和mutate中的函數

[英]Use na.rm=TRUE with functions inside mutate

我正在嘗試計算累積總和,並使用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答案,因為實際上這是一個長鏈管道的一部分。

您需要為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解決方案是使用tidyr::replace_na (參見http://tidyr.tidyverse.org/reference/replace_na.html ):

library(dplyr)
library(tidyr)

df %>% replace_na(list(water = 0)) %>% mutate(sumwater = cumsum(water))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM