用R中的组中的非NA字符替换一组值的NA [重复]

Posted

技术标签:

【中文标题】用R中的组中的非NA字符替换一组值的NA [重复]【英文标题】:Replace NAs for a group of values with a non-NA character in group in R [duplicate] 【发布时间】:2021-12-12 22:44:01 【问题描述】:

如果此非 NA 字符并不总是出现在同一位置(第一行或其他),我正在尝试找到一种方法来逐组替换具有非 NA 字符的一组值的 NA。我发现的解决方案不适用于字符或仅基于先前或后续值填充。

这是一个数据示例:

participant_id <- c("ps1", "ps1", "ps1", "ps1", "ps2", "ps2", "ps3", "ps3", "ps3", "ps3")
test <- c("test1", NA, NA, NA, NA, "test2", NA, NA, "test3", NA)
data.frame(participant_id, test)

这就是我想要的结果:

participant_id test
ps1 test1
ps1 test1
ps1 test1
ps1 test1
ps2 test2
ps2 test2
ps3 test3
ps3 test3
ps3 test3
ps3 test3

【问题讨论】:

【参考方案1】:

这是使用来自zoo 包的na.locf 的另一种方法:

library(zoo)
library(dplyr)
df %>% 
  group_by(participant_id) %>% 
  arrange(participant_id, test) %>% 
  mutate(test = zoo::na.locf(test, na.rm=FALSE))
   participant_id test 
   <chr>          <chr>
 1 ps1            test1
 2 ps1            test1
 3 ps1            test1
 4 ps1            test1
 5 ps2            test2
 6 ps2            test2
 7 ps3            test3
 8 ps3            test3
 9 ps3            test3
10 ps3            test3

【讨论】:

【参考方案2】:

我们可以在按“participant_id”分组后使用tidyr中的fill

library(dplyr)
library(tidyr)
df1 <- df1 %>%
    group_by(participant_id) %>%
    fill(test, .direction = "downup") %>%
    ungroup

-输出

df1
# A tibble: 10 × 2
   participant_id test 
   <chr>          <chr>
 1 ps1            test1
 2 ps1            test1
 3 ps1            test1
 4 ps1            test1
 5 ps2            test2
 6 ps2            test2
 7 ps3            test3
 8 ps3            test3
 9 ps3            test3
10 ps3            test3

数据

df1 <- data.frame(participant_id, test)

【讨论】:

以上是关于用R中的组中的非NA字符替换一组值的NA [重复]的主要内容,如果未能解决你的问题,请参考以下文章

用序列中的缺失值替换 NA (R)

R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值

r 用R中的0替换NA,NAN和Inf

R:用向量中的项目替换NA

R语言把dataframe中的NA值替换为0

R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0具体列的NA值替换(replace)为0若干列的NA值替换(replace)为0