dplyr:使用 NA 进行行向变异时出错
dplyr: error with rowwise mutate with NA
我在 dplyr
中的行 mutate
中遇到奇怪的错误。这是一个例子:
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)
谢谢!
您的错误是您错误地调用了 mean
和 median
。
虽然 sum
可以采用任意数量的参数并将它们全部相加,但 mean
和 median
仅采用一个 x
参数来采用 mean/median 的.
就像如果 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))
(旁注:您在这里一次只计算 2 个值的平均值和中值,所以平均值等于中值...)
我在 dplyr
中的行 mutate
中遇到奇怪的错误。这是一个例子:
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)
谢谢!
您的错误是您错误地调用了 mean
和 median
。
虽然 sum
可以采用任意数量的参数并将它们全部相加,但 mean
和 median
仅采用一个 x
参数来采用 mean/median 的.
就像如果 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))
(旁注:您在这里一次只计算 2 个值的平均值和中值,所以平均值等于中值...)