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个值的均值和中位数,所以平均值等于中位数......)