用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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值
R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0具体列的NA值替换(replace)为0若干列的NA值替换(replace)为0