R 为什么中位数和合并在行数不均匀的情况下不起作用?

R 为什么中位数和合并在行数不均匀的情况下不起作用?,r,dplyr,R,Dplyr,在a中,我尝试使用dplyr::coalesce来给出答案,用分组中值替换NA。但是我有一个 Error: Argument 2 must be an integer vector, not a double vector 错误。为了弄清楚这是什么原因,我最终得出了这样的结论:只有当nrow(df)是一个非偶数时,错误才会出现?我有点怀疑这是否真的是一种解释,但那一刻我决定在这里问一个问题:这是什么原因?我发现的唯一相关问题是,但我不确定这是否是同一个问题 编辑: 如果我用最小值或最大值替换中

在a中,我尝试使用
dplyr::coalesce
来给出答案,用分组中值替换
NA
。但是我有一个

Error: Argument 2 must be an integer vector, not a double vector
错误。为了弄清楚这是什么原因,我最终得出了这样的结论:只有当
nrow(df)
是一个非偶数时,错误才会出现?我有点怀疑这是否真的是一种解释,但那一刻我决定在这里问一个问题:这是什么原因?我发现的唯一相关问题是,但我不确定这是否是同一个问题

编辑: 如果我用
最小值
最大值
替换
中值
,则不会产生错误

MRE:

它能用

附加说明
使用
ifelse(is.na(.)…
而不是coalesce也与行数无关:

df %>%
group_by(Group) %>% 
mutate_at(vars(-group_cols()), ~ifelse(is.na(.), median(., na.rm = TRUE), .)) %>% 
ungroup()

p.p.S当使用
平均值
而不是
中值
时,误差也会增加
中值
文档中说

默认方法返回与x类型相同的一个对象的长度, 除非x是逻辑或偶数长度的整数,否则 将加倍。”

如果将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()

这可能与
median
文档有关:“默认方法返回一个与x类型相同的长度为1的对象,除非x是逻辑长度或偶数长度的整数,否则结果将是双精度的。“谢谢你,xilliam。这就解释了对元素数量的奇怪依赖性!我真的应该更仔细地阅读
?median
!谢谢你的帮助;)我建议你用敏锐的眼睛发现依赖性;)
df %>%
group_by(Group) %>% 
mutate_at(vars(-group_cols()), ~ifelse(is.na(.), median(., na.rm = TRUE), .)) %>% 
ungroup()
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()
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)