R: доступ к ячейкам в кадре данных - PullRequest
2 голосов
/ 01 апреля 2019

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

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Поскольку мы используем 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
1 голос
/ 01 апреля 2019

Только подмножество 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...