如何按组替换具有固定值的行中的NA?

问题描述 投票:1回答:1

我正在尝试寻找一种方法来用固定值替换代码中的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。任何帮助,将不胜感激!

r group-by na
1个回答
1
投票

按“动物”分组后,我们可以使用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))
© www.soinside.com 2019 - 2024. All rights reserved.