我在dplyr中的逐行dplyr中出现了一些奇怪的错误。下面是一个示例:
set.seed(1)
df <- data.frame(a = rnorm(5), b = rnorm(5))
df[2,'b'] <- NAsum没有问题,但是摘要函数是有问题的:
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)谢谢!
发布于 2015-07-13 05:28:55
您的错误是不正确地调用mean和median。
sum可以接受任意数量的参数,只需将它们全部相加,而mean和median只接受一个x参数来取平均值/中位数。
就像a和b是向量,并且您想要使用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))(附带说明:这里一次只计算两个值的平均值和中位数,所以平均值等于中位数。)
https://stackoverflow.com/questions/31375835
复制相似问题