Dapatkah mutasi digunakan ketika mutasi bersyarat (tergantung pada nilai-nilai nilai kolom tertentu)?
Contoh ini membantu menunjukkan apa yang saya maksud.
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
Saya berharap dapat menemukan solusi untuk masalah saya menggunakan paket dplyr (dan ya saya tahu ini bukan kode yang seharusnya berfungsi, tapi saya rasa ini menjelaskan tujuannya) untuk membuat kolom baru 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})
Hasil dari kode yang saya cari harus memiliki hasil ini dalam contoh khusus ini:
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
Apakah ada yang punya ide tentang bagaimana melakukan ini di dplyr? Kerangka data ini hanyalah contoh, kerangka data yang saya tangani jauh lebih besar. Karena kecepatannya saya mencoba menggunakan dplyr, tetapi mungkin ada cara lain yang lebih baik untuk menangani masalah ini?
dplyr::case_when()
jauh lebih jelas daripadaifelse
,