Bagaimana saya bisa menggunakan kolom sebagai parameter fungsi yang disesuaikan:

custom_function <- function(value, group) {
  if (group == "setosa") {
    value*0
  } else if (group == "versicolor") {
    value*1
  } else if (group == "virginica") {
    value*2
  }
}

iris %>%
  mutate(new_column = custom_function(value = Sepal.Length, group = Species))
0
qfazille 12 Mei 2021, 16:32

1 menjawab

Jawaban Terbaik

Fungsi Anda mengharapkan grup memiliki panjang 1, jadi Anda harus mewujudkannya:

iris %>% 
  group_by(Species) %>% ## 1 Species per group
  mutate(
    ## use first() so only a single value is passed to the group arg
    new_column = custom_function(value = Sepal.Length, group = first(Species))
  )

Atau Anda dapat membuat vektorisasi fungsi Anda dengan menggunakan ifelse() (atau dplyr::case_when yang di-vektorkan sebagai ganti if(){}else{}. Ini jelas merupakan contoh sederhana, jadi sulit untuk mengetahui mana yang lebih tepat untuk kasus penggunaan Anda yang sebenarnya.

1
Gregor Thomas 12 Mei 2021, 13:59