Saya mengalami kesulitan dalam menghasilkan fitur baru untuk serangkaian kondisi tertentu.

Mengambil kumpulan data 'iris' sebagai contoh yang dapat direproduksi Saya ingin menemukan panjang kelopak maksimum untuk setiap spesies dan membuat kolom baru, kemudian menetapkan istilah 'panjang_tertinggi' di mana pun yang tertinggi telah diidentifikasi - Saya hanya ingin menampilkan ini di baris di mana ini berlaku.

Saya kehilangan sesuatu yang tampak jelas bagi orang lain, tetapi saya sendiri tidak dapat menjembatani kesenjangan itu. Akan sangat menyambut setiap petunjuk.

Kode yang saya coba adalah seperti di bawah ini:

iris%>% mutate(high_spec = case_when(distinct(Species) & max(Petal.Length) ~ 'high_length'))

Saya mendapatkan kesalahan berikut:

Kesalahan: Masalah dengan mutate() kolom high_spec. high_spec = case_when(distinct(Species) & max(Petal.Length) ~ "high_length"). x tidak ada metode yang berlaku untuk 'berbeda' yang diterapkan pada objek kelas "faktor"

Saya sudah mencoba mengubah spesies menjadi vektor karakter tetapi ini juga tidak berfungsi sebagaimana mestinya.

Terima kasih

r
0
En_JK7 26 November 2021, 15:31
Saya tidak yakin apa yang Anda coba lakukan. LHS dari case_when harus berupa ekspresi logika. max mengembalikan nilai maksimum. distinct mengembalikan objek seperti data.frame (atau data.frame. Bisakah Anda memasukkan output yang Anda harapkan?
 – 
Maurits Evers
26 November 2021, 15:46
Saya tidak yakin tentang tujuannya. Apakah ini membantu: iris %>% group_by(Species) %>% mutate(high_spec = ifelse(Petal.Length == max(Petal.Length),'high_length',NA)) ?
 – 
MonJeanJean
26 November 2021, 15:47
Terima kasih keduanya, itu berhasil! Saya mencoba menggunakan metodologi yang salah
 – 
En_JK7
26 November 2021, 17:13

1 menjawab

Jawaban Terbaik

Menindaklanjuti dari komentar saya di atas, saya berasumsi Anda mengejar sesuatu seperti ini?

iris %>%
    group_by(Species) %>%
    mutate(high_spec = if_else(
        Petal.Length == max(Petal.Length), "high_length", "")) %>%
    ungroup()     

Tidak perlu di sini untuk case_when. Alih-alih gunakan group_by untuk melakukan operasi per Species.

Jika Anda memiliki beberapa ketentuan, case_when mungkin masuk akal; tetapi dalam hal ini saya sarankan untuk melihat contoh yang diberikan di ?case_when. Itu juga selalu merupakan praktik yang baik dengan case_when untuk menangkap kondisi jatuh.

3
Maurits Evers 26 November 2021, 15:48