在最近的一个问题中,我尝试使用分组中位数dplyr::coalesce替换来给出答案。NA但我得到了一个
Error: Argument 2 must be an integer vector, not a double vector
Run Code Online (Sandbox Code Playgroud)
错误。试图找出造成这种情况的原因是什么,我终于指出了只有nrow(df)在非偶数时才会出现错误的地方?我有点怀疑这是否真的是解释,但那就是我决定在这里问问题的那一刻:这是什么原因?我发现的唯一相关问题是here,但我不确定这是否是同一个问题?
如果我替换为or ,则不会引发错误!medianminmax
再次:
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()
Run Code Online (Sandbox Code Playgroud)
加薪:
错误:参数 2 必须是整数向量,而不是双精度向量
但是如果我删除最后一行(或最后三行):
df[1:6, ] %>%
group_by(Group) %>%
mutate_at(vars(-group_cols()), ~coalesce(., median(.,na.rm=TRUE))) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
有用....!!?
PS
使用ifelse(is.na(.)...而不是合并也可以独立于行数:
df %>%
group_by(Group) %>%
mutate_at(vars(-group_cols()), ~ifelse(is.na(.), median(., na.rm = TRUE), .)) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
meanPPS 当使用而不是时也会引发错误median
文档median说
默认方法返回与 x 类型相同的长度为 1 的对象,除非 x 是逻辑或偶数长度的整数,否则结果将为 double。”
如果 df$ID 设置为 ,则不会引发您看到的错误as.numeric。建议coalesce让班级感到困惑df$ID。
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))
# convert ID to numeric
df$ID <- as.numeric(df$ID)
df %>%
group_by(Group) %>%
mutate_at(vars(-group_cols()), ~coalesce(., median(.,na.rm=TRUE))) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
另请注意classID 的值如何根据输入方式而变化:
IDa = 1:7
class(IDa)
IDb = c(1,2,3,4,5,6,7)
class(IDb)
IDc = c(1L,2L,3L,4L,5L,6L,7L)
class(IDc)
Run Code Online (Sandbox Code Playgroud)