У меня есть набор данных, который включает в себя некоторые не связанные данные, которые я хотел бы заменить на NA. В следующем примере, если данные в столбцах с rep1 по rep4 не соответствуют одному из значений в столбце ID, я хотел бы заменить это значение на NA. В этом случае значения x, y и z не указаны в столбце идентификатора, поэтому их следует заменить.
Это несколько схожий вопрос, который я задал здесь ранее: Если данные присутствуют, замените их данными из другого столбца на основе идентификатора строки
Я думаю, что решение будетпохоже на то, что было дано в предыдущем вопросе, но я не знаю, как изменить вторую часть ~ value[match(., ID)]
, чтобы вернуть NA для значений, которые не перечислены в столбце ID.
df %>% mutate_at(vars(rep1:rep4), ~ value[match(., ID)])
ID rep1 rep2 rep3 rep4
a
b a
c a b
d a b c
e a b c d
f
g x
h
i
j y z
k z
l
m
Результат должен выглядеть следующим образом:
ID rep1 rep2 rep3 rep4
a
b a
c a b
d a b c
e a b c d
f
g NA
h
i
j NA NA
k NA
l
m
Вот данные с использованием dput()
structure(list(ID = structure(1:13, .Label = c("a", "b", "c",
"d", "e", "f", "g", "h", "i", "j", "k", "l", "m"), class = "factor"),
rep1 = structure(c(1L, 2L, 2L, 2L, 2L, 1L, 3L, 1L, 1L, 4L,
5L, 1L, 1L), .Label = c("", "a", "x", "y", "z"), class = "factor"),
rep2 = structure(c(1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 3L,
1L, 1L, 1L), .Label = c("", "b", "z"), class = "factor"),
rep3 = structure(c(1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L), .Label = c("", "c"), class = "factor"), rep4 = structure(c(1L,
1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("",
"d"), class = "factor")), class = "data.frame", row.names = c(NA, -13L))