我正试图找到一种方法来代替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)
这是我想结束的:
participant_id | test | ps1 | test1 |
---|---|
ps1 | test1 |
ps1 | test1 |
ps1 | test1 |
ps2 | test2 |
ps2 | test2 |
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)