df1
和df2
是两个数据帧(下面的代码)。
> df1
X1 X2 X3 X4 X5
1 1 2 3 4 5
2 6 7 8 9 10
3 11 12 13 14 15
> df2
row col drop
1 1 1 FALSE
2 2 1 FALSE
3 3 1 TRUE
4 1 2 FALSE
5 2 2 FALSE
6 3 2 FALSE
7 1 3 TRUE
8 2 3 FALSE
9 3 3 FALSE
10 1 4 FALSE
11 2 4 FALSE
12 3 4 FALSE
13 1 5 FALSE
14 2 5 FALSE
15 3 5 FALSE
使用来自df2
的信息,我想将df1
转换为
> df1
X1 X2 X3 X4 X5
1 1 2 NA 4 5
2 6 7 8 9 10
3 NA 12 13 14 15
您将如何做?
用于创建df1
和df2
的代码:
library(dplyr)
df1 <- data.frame(matrix(1:15, nrow = 3, ncol = 5, byrow = TRUE))
df2 <- expand.grid(row = 1:3, col = 1:5) %>%
mutate(drop = c(rep(FALSE, 2), TRUE, rep(FALSE, 3), TRUE, rep(FALSE, 8)))
答案 0 :(得分:1)
仅对TRUE
中的df2
值进行分组,将其转换为矩阵,并将NA
分配给df1
中的行和列索引。
df1[as.matrix(df2[df2$drop, -3])] <- NA
df1
# X1 X2 X3 X4 X5
#1 1 2 NA 4 5
#2 6 7 8 9 10
#3 NA 12 13 14 15
答案 1 :(得分:1)
在使用dplyr
时,我们可以利用链条
library(dplyr)
df2 %>%
filter(drop) %>%
select(-drop) %>%
as.matrix %>%
replace(df1, ., NA)
# X1 X2 X3 X4 X5
#1 1 2 NA 4 5
#2 6 7 8 9 10
#3 NA 12 13 14 15