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