【发布时间】:2020-03-06 14:55:32
【问题描述】:
在recent question 中,我尝试使用dplyr::coalesce 将NA 替换为分组中位数来给出答案。但我有一个
Error: Argument 2 must be an integer vector, not a double vector
错误。试图弄清楚这是什么原因,我终于指出它看起来像只有当nrow(df)是一个非偶数时才会出现错误?我有点怀疑这是否真的是解释,但那是我决定在这里提出问题的那一刻:这是什么原因?我发现的唯一相关问题是here,但我不确定这是否是同一个问题?
编辑:
如果我将median 替换为min 或max,则不会引发错误!
MRE:
library(dplyr)
df <- data.frame(ID = 1:7,
Group = c(1, 1, 1, 2, 2, 2, 1),
val1 = c(1, NA, 3, 2, 2, 3, 2),
val2 = c(2, 2, 2, NA, 1, 3, 2))
df %>%
group_by(Group) %>%
mutate_at(vars(-group_cols()), ~coalesce(., median(.,na.rm=TRUE))) %>%
ungroup()
加注:
错误:参数 2 必须是整数向量,而不是双精度向量
但如果我删除最后一行(或最后三行):
df[1:6, ] %>%
group_by(Group) %>%
mutate_at(vars(-group_cols()), ~coalesce(., median(.,na.rm=TRUE))) %>%
ungroup()
它有效....!!?
附言
使用 ifelse(is.na(.)... 而不是 coalesce 也可以独立于行数:
df %>%
group_by(Group) %>%
mutate_at(vars(-group_cols()), ~ifelse(is.na(.), median(., na.rm = TRUE), .)) %>%
ungroup()
P.P.S 使用mean 而不是median 时也会引发错误
【问题讨论】:
-
也许这与
median文档有关:“默认方法返回与 x 相同类型的长度为一的对象,除非 x 是逻辑或偶数长度的整数,当结果将是双倍的。”