Czy mutatu można użyć, gdy mutacja jest warunkowa (w zależności od wartości określonych wartości kolumn)?
Ten przykład pomaga pokazać, o co mi chodzi.
structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4,
2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4,
5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, 6, 3), f = c(2, 3, 4,
2, 2, 7, 5, 2)), .Names = c("a", "b", "c", "d", "e", "f"), row.names = c(NA,
8L), class = "data.frame")
a b c d e f
1 1 1 6 6 1 2
2 3 3 3 2 2 3
3 4 4 6 4 4 4
4 6 2 5 5 5 2
5 3 6 3 3 6 2
6 2 7 6 7 7 7
7 5 2 5 2 6 5
8 1 6 3 6 3 2
Miałem nadzieję, że znajdę rozwiązanie mojego problemu za pomocą pakietu dplyr (i tak, wiem, że to nie kod, który powinien działać, ale wydaje mi się, że wyjaśnia cel) do utworzenia nowej kolumny g:
library(dplyr)
df <- mutate(df,
if (a == 2 | a == 5 | a == 7 | (a == 1 & b == 4)){g = 2},
if (a == 0 | a == 1 | a == 4 | a == 3 | c == 4) {g = 3})
Wynik szukanego kodu powinien mieć następujący wynik w tym konkretnym przykładzie:
a b c d e f g
1 1 1 6 6 1 2 3
2 3 3 3 2 2 3 3
3 4 4 6 4 4 4 3
4 6 2 5 5 5 2 NA
5 3 6 3 3 6 2 NA
6 2 7 6 7 7 7 2
7 5 2 5 2 6 5 2
8 1 6 3 6 3 2 3
Czy ktoś ma pomysł jak to zrobić w dplyr? Ta ramka danych to tylko przykład, ramki danych, z którymi mam do czynienia, są znacznie większe. Ze względu na jego szybkość próbowałem użyć dplyr, ale może są inne, lepsze sposoby rozwiązania tego problemu?
dplyr::case_when()
jest znacznie jaśniejsze niżifelse
,