dplyr:带有NA的rowwise mutate错误

iva*_*n-k 1 r na dplyr

我正奇怪的错误与逐行mutatedplyr.这是一个例子:

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

没有问题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)
Run Code Online (Sandbox Code Playgroud)

现在,我们可以尝试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)
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里做错了什么.我认为预期的行为应该是:

as.data.frame(apply(df, 1, mean, na.rm = T)
Run Code Online (Sandbox Code Playgroud)

谢谢!

mat*_*fee 5

您的错误是您正在呼叫 mean并且median不正确.

虽然sum可以接受任意数量的参数,但只会将它们全部添加,mean并且median只接受一个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))
Run Code Online (Sandbox Code Playgroud)

(旁注:你这里一次只计算2个值的均值和中位数,所以平均值等于中位数...)