用r中的group中的非na字符替换一组值中的NAs



我正试图找到一种方法来代替NAs与非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)

这是我想结束的:

tbody> <<tr>ps3ps3ps3ps3
participant_idtest
ps1test1
ps1test1
ps1test1
ps1test1
ps2test2
ps2test2
test3
test3
test3
test3

这是使用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

我们可以使用'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)

相关内容

  • 没有找到相关文章

最新更新