tidyr::fill()具有连续整数而不是重复值
按tidyr::fill()具有连续整数而不是重复值,r,tidyr,R,Tidyr,按id分组后,我希望用顺序值替换dist_from_top中的NAs,以便dist_from_top变为c(5,4,3,2,1,5,4,3,2)。我使用每个id分组中的dist\u from\u top值作为排序种子,以填充dist\u from\u top的上下值 tidyr::fill()可以在整个分组中填充相同的值,但我想不出一种方法使其在填充时增加或减少1。非常感谢您的帮助 library(dplyr) library(tidyr) df <- tribble( ~
id
分组后,我希望用顺序值替换dist_from_top
中的NAs,以便dist_from_top
变为c(5,4,3,2,1,5,4,3,2)。我使用每个id
分组中的dist\u from\u top
值作为排序种子,以填充dist\u from\u top
的上下值
tidyr::fill()
可以在整个分组中填充相同的值,但我想不出一种方法使其在填充时增加或减少1。非常感谢您的帮助
library(dplyr)
library(tidyr)
df <-
tribble(
~id, ~mgr, ~dist_from_top,
"A", "B", NA,
"A", "C", NA,
"A", "D", 3,
"A", "E", NA,
"A", "F", NA,
"B", "C", NA,
"B", "D", 4,
"B", "E", NA,
"B", "F", NA
)
... %>% mutate(rn = -row_number())
dist\u from\u top
不是NA
的一行,添加由dist\u from\u top
和rn
之间的差值定义的偏移量:
... %>% mutate(dist_from_top = rn + max(dist_from_top - rn, na.rm = TRUE))
这使用max()
仅拾取一个值,假设只有一个值不是NA
mutate()
操作都对组进行操作:
df %>%
group_by(id) %>%
mutate(rn = ...) %>%
mutate(dist_from_top = ...) %>%
ungroup() %>%
select(-rn)
如果有一个all-
NA
组,您将看到一条警告。您总是从5开始吗?我不确定我是否明白这将如何与id B具体工作。那里只有4条记录。我很确定fill
并不是为填充不同的值而设计的,所以我认为定制mutate()
函数可能是更好的选择。如果你有c(5,NA,1)
?这里填的是什么?@flick先生,我不总是以任何数字开头或结尾。每个id
将有一个与之关联的有序mgr
值列表,其中一个mgr
值将有一个“种子”值,我需要从中填充相邻值。答案可能不涉及fill()
,但fill的附加版本是我能在概念上描述我的问题的最接近的版本。
df %>%
group_by(id) %>%
mutate(rn = ...) %>%
mutate(dist_from_top = ...) %>%
ungroup() %>%
select(-rn)