R:访问数据帧中的单元

时间:2019-04-01 09:52:22

标签: r

df1df2是两个数据帧(下面的代码)。

> 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

您将如何做?


用于创建df1df2的代码:

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)))

2 个答案:

答案 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