Đột biến có thể được sử dụng khi đột biến có điều kiện (tùy thuộc vào giá trị của các giá trị cột nhất định) không?
Ví dụ này giúp thể hiện những gì tôi muốn nói.
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
Tôi đã hy vọng tìm ra giải pháp cho vấn đề của mình bằng cách sử dụng gói dplyr (và vâng tôi biết đây không phải là mã nên hoạt động, nhưng tôi đoán nó làm cho mục đích rõ ràng) để tạo một cột mới 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})
Kết quả của mã tôi đang tìm kiếm phải có kết quả này trong ví dụ cụ thể này:
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
Có ai có ý tưởng về cách làm điều này trong dplyr không? Khung dữ liệu này chỉ là một ví dụ, các khung dữ liệu tôi đang xử lý lớn hơn nhiều. Vì tốc độ của nó, tôi đã cố gắng sử dụng dplyr, nhưng có lẽ có những cách khác, tốt hơn để xử lý vấn đề này?
dplyr::case_when()
rõ ràng hơn nhiều so vớiifelse
,