2015-07-13 31 views
1

我得到奇怪的錯誤mutatedplyr行。這裏有一個例子:dplyr:行錯誤與NA錯誤

set.seed(1) 
df <- data.frame(a = rnorm(5), b = rnorm(5)) 
df[2,'b'] <- NA 

沒有與sum沒有問題,但彙總函數是有問題的:

mutate(rowwise(df), sum(a, b, na.rm = T)) # works 

mutate(rowwise(df), mean(a, b, na.rm = T)) 
#! Error: missing value where TRUE/FALSE needed 
mutate(rowwise(df), median(a, b, na.rm = T)) 
#! Error: unused argument (-0.820468384118015) 

現在,我們可以嘗試NA在第一列:

df <- data.frame(a = rnorm(5), b = rnorm(5)) 
df[2,'a'] <- NA 

mutate(rowwise(df), sum(a, b, na.rm = T)) # works 

mutate(rowwise(df), mean(a, b, na.rm = T)) 
#! no error, but returns `NaN` 
mutate(rowwise(df), median(a, b, na.rm = T)) 
#! Error: unused argument (-0.820468384118015) 

我不確定我在這裏做錯了什麼。我認爲預期的行爲應該是相同的:

as.data.frame(apply(df, 1, mean, na.rm = T) 

謝謝!

+2

嘗試'df%>%rowwise()%>%mutate(Mean = mean(c(a,b ),na.rm = TRUE))' – akrun

回答

5

您的錯誤是您錯誤地撥打meanmedian

雖然sum可以採取任何數量的參數,將只需添加它們,meanmedian採取只在一個x參數取的平均值/中位數。

就像如果ab爲載體和你想合成矢量的意思是你會使用mean(c(a, b))而非mean(a,b),你做同樣的位置:

mutate(rowwise(df), mean=mean(c(a, b), na.rm = T), med=median(c(a, b), na.rm=T)) 

(旁註:你是唯一計算一次2個值的均值和中位數,所以平均值等於中位數......)