我正在尝试寻找一种方法来用固定值替换代码中的NA值。
Example
Animals Value
Dog 13
Dog 20
Dog 27
Dog 35
Dog NA
Dog NA
Dog NA
Cat 17
Cat 24
Cat 31
Cat NA
Cat NA
Mouse 100
Mouse 107
Mouse NA
Mouse NA
Mouse NA
Mouse NA
我想做的是将NA值替换为7的倍数,这样看起来像:
Animals Value
Dog 13
Dog 20
Dog 27
Dog 34
Dog 41
Dog 48
Dog 55
Cat 17
Cat 24
Cat 31
Cat 38
Cat 45
Mouse 100
Mouse 107
Mouse 114
Mouse 121
Mouse 128
Mouse 135
我尝试查看“ fill”和“ complete”函数,但是从我收集的数据来看,它通常用前一个行值或固定值来填充NA。任何帮助,将不胜感激!
按“动物”分组后,我们可以使用seq
library(dplyr)
df1 %>%
group_by(Animals) %>%
mutate(Value = seq(first(Value), length.out = n(), by = 7))
# A tibble: 18 x 2
# Groups: Animals [3]
# Animals Value
# <chr> <dbl>
# 1 Dog 13
# 2 Dog 20
# 3 Dog 27
# 4 Dog 34
# 5 Dog 41
# 6 Dog 48
# 7 Dog 55
# 8 Cat 17
# 9 Cat 24
#10 Cat 31
#11 Cat 38
#12 Cat 45
#13 Mouse 100
#14 Mouse 107
#15 Mouse 114
#16 Mouse 121
#17 Mouse 128
#18 Mouse 135
或者另一个选项是coalesce
df1 %>%
group_by(Animals) %>%
mutate(Value = coalesce(Value, seq(first(Value), length.out = n(), by = 7L)))
df1 <- structure(list(Animals = c("Dog", "Dog", "Dog", "Dog", "Dog",
"Dog", "Dog", "Cat", "Cat", "Cat", "Cat", "Cat", "Mouse", "Mouse",
"Mouse", "Mouse", "Mouse", "Mouse"), Value = c(13L, 20L, 27L,
35L, NA, NA, NA, 17L, 24L, 31L, NA, NA, 100L, 107L, NA, NA, NA,
NA)), class = "data.frame", row.names = c(NA, -18L))