gpt4 book ai didi

r - 为什么中位数和合并对于奇数行数不起作用?

转载 作者:行者123 更新时间:2023-12-02 03:48:19 25 4
gpt4 key购买 nike

recent question中我尝试使用 dplyr::coalesce 给出答案替换NA具有分组中位数。但我得到了一个

Error: Argument 2 must be an integer vector, not a double vector

错误。试图找出导致此问题的原因,我最终指出了错误的位置看起来仅在 nrow(df) 时出现。是非偶数吗?我有点怀疑这是否真的是解释,但那就是我决定在这里问问题的那一刻:这是什么原因?我发现的唯一相关问题是 here但我不确定这是否是同样的问题?

编辑:

如果我替换 median,则不会引发错误与 minmax !

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()

加薪:

Error: Argument 2 must be an integer vector, not a double vector

但是如果我删除最后一行(或最后三行):

df[1:6, ] %>%
group_by(Group) %>%
mutate_at(vars(-group_cols()), ~coalesce(., median(.,na.rm=TRUE))) %>%
ungroup()

它有效......!!?

附注
使用ifelse(is.na(.)...而不是合并工作也独立于行数:

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

P.P.S 使用 mean 时也会引发错误而不是median

最佳答案

中位数文档说

The default method returns a length-one object of the same type as x, except when x is logical or integer of even length, when the result will be double."

如果 df$ID 设置为 as.numeric,则不会引发您看到的错误。表明 coalescedf$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()

另请注意 ID 的如何根据输入方式而变化:

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)

关于r - 为什么中位数和合并对于奇数行数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60566571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com