Я пытаюсь сбросить (установить в NA) значения в 1 столбце, основываясь на значениях в другом столбце; и сделать это через большой набор столбцов. Идея состоит в том, чтобы затем передать данные в функцию построения графиков, чтобы сгенерировать разные графики для разных срезов данных.
Вот воспроизводимый пример:
d <- data.frame("A_agree" = sample(1:7, 20, replace=T),
"B_agree" = sample(1:7, 20, replace=T),
"C_agree" = sample(1:7, 20, replace=T),
"A_change" = sample(1:5, 20, replace=T),
"B_change" = sample(1:5, 20, replace=T),
"C_change" = sample(1:5, 20, replace=T))
Я уже нашел Следующее решение с использованием базы R, но это, конечно, медленно, и я пытаюсь учиться все больше и больше dplyr
, поэтому мне было интересно, как этого добиться в dplyr
d.positive <- d
for (n in (c("A","B","C"))) {
for (i in 1:nrow(d.positive)) {
d.positive[i, paste0(n, "_agree")] <- ifelse(d.positive[i, paste0(n, "_change")] > 3,
d.positive[i, paste0(n, "_agree")],
NA)
}
}
d.neutral <- d
for (n in (c("A","B","C"))) {
for (i in 1:nrow(d.neutral)) {
d.neutral[i, paste0(n, "_agree")] <- ifelse(d.neutral[i, paste0(n, "_change")] == 3,
d.neutral[i, paste0(n, "_agree")],
NA)
}
}
d.negative <- d
for (n in (c("A","B","C"))) {
for (i in 1:nrow(d.negative)) {
d.negative[i, paste0(n, "_agree")] <- ifelse(d.negative[i, paste0(n, "_change")] < 3,
d.negative[i, paste0(n, "_agree")],
NA)
}
}
Я думал, что используйте gather()
, а затем проверьте для каждой строки, больше ли соответствующий столбец (следовательно, !!dimension
), чем определенное значение (в данном случае 3
), но, похоже, оно не работает?
d %>%
gather(dimension,
value,
paste0(c("A","B","C"), "_agree")
) %>%
case_when(!!dimension > 3 ~ value=NA)
В качестве альтернативы я думал, что буду использовать map2_dfr
из purrr
, но я не думаю, что он перебирает ячейки, просто берет весь столбец, следовательно, это не работает:
map2_dfr(.x = d %>%
select( paste0(c("A","B","C"), "_agree") ),
.y = d %>%
select( paste0(c("A","B","C"), "_change") ),
~ if_else(.y > 3, x, NA)} )
Любые указатели были бы действительно полезны, чтобы продолжать узнавать о чудесном мире dplyr
!