Her sütunun birçok değer alabilen bir karakter vektörü olduğu bir tibble düşünün - diyelim ki "A" - "F".
library(tidyverse)
sample_df <- tibble(q1 = c("A", "B", "C"), q2 = c("B", "B", "A"))
Bağımsız değişken olarak bir sütun adı alır ve bu sütunu yeniden kodlar, böylece herhangi bir yanıt "A" bir NA olur ve df aksi halde olduğu gibi döndürülür. Bu şekilde tasarlanmasının nedeni, belirli bir sütunu kullanarak bir dizi işlemi gerçekleştiren daha geniş bir boru hattına uymaktır.
Bunu yapmanın birçok yolu var. Ama en iyi deyimsel tidy_eval / tidyverse yaklaşımının ne olacağını anlamak istiyorum. İlk olarak, soru adının mutasyona uğramış bir fiilin sol tarafında olması gerektiğinden , !!
ve :=
operatörlerini uygun şekilde kullanıyoruz. Ama sonra, sağ tarafa ne konmalı?
fix_question <- function(df, question) {
df %>% mutate(!!question := recode(... something goes here...))
}
fix_question(sample_df, "q1") # should produce a tibble whose first column is (NA, "B", "C")
İlk düşüncem bunun işe yarayacağıydı:
df %>% mutate(!!question := recode(!!question, "A" = NA_character_))
Ama tabii ki fonksiyonun içindeki patlama sadece değişmez karakter dizesini döndürür (örneğin "q1"). Temel R [[
operatörünü kullanarak ve .
dplyr'den yapıya güvenerek , sağ taraftaki verilere başvurmak için hileli bir rota gibi hissettiren şeyi aldım ve dplyr'den yapıya güveniyorum ve işe yarıyor, bu yüzden bir anlamda temel sorunumu çözdüm:
df %>% mutate(!!question := recode(.[[question]], "A" = NA_character_))
Deneme konusunda çok iyi olan insanlardan, bunu yapmanın daha deyimsel bir yolu olup olmadığı konusunda geri bildirim almakla ilgileniyorum. Düşüncesi olan var mı?
q1
(sembol) hem de "q1"
(dize) ile çalışan en özlü versiyon olduğuna inanıyorum :df %>% mutate_at( vars(!!ensym(question)), recode, A = NA_character_)