【问题标题】:dplyr: error with rowwise mutate with NAdplyr:使用 NA 进行逐行变异时出错
【发布时间】:2015-07-13 05:19:44
【问题描述】:

我在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)

谢谢!

【问题讨论】:

  • 试试df %&gt;% rowwise() %&gt;% mutate(Mean = mean(c(a,b), na.rm=TRUE))

标签: r dplyr na


【解决方案1】:

您的错误是您错误地调用了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 个值的平均值和中位数,所以平均值等于中位数......)

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多