Saya menerapkan fungsi R dplyr::filter ke set data penerbangan nycflights13. Saya mencoba memilih hanya penerbangan pada bulan November dan Desember, menggunakan dua skrip alternatif.

library (tidyverse) 
library (nycflights13)

1 df1 <- filter (flights, month == 11 | month == 12)

2 df2 <- filter (flights, month == c(11,12))

df1 menghasilkan hasil yang diharapkan (dengan total 55403 pengamatan) dan df2 juga memberikan hasil yang diharapkan, tetapi dengan kumpulan data hanya berisi setengah dari pengamatan (total 27702). df2 menghapus setiap baris lainnya.

Pertanyaan saya adalah: apakah ada yang tahu mengapa? Saya tahu sintaks df2 tidak benar, tetapi saya mencoba memahami mengapa ia memberikan hasil seperti itu.

Terima kasih

1
frankieR 15 Januari 2021, 20:56

4 jawaban

Jawaban Terbaik

Pertanyaan saya adalah: apakah ada yang tahu mengapa?

R mendaur ulang vektor ketika mereka tidak cukup panjang untuk apa pun yang Anda butuhkan. Dalam sintaks df2 filter akan memfilter untuk bulan = 11 di baris 1, bulan = 12 di baris 2, bulan = 11 di baris 3...

Anda harus berakhir dengan penerbangan dari November yang berasal dari baris ganjil dari data asli & penerbangan dari Desember yang berasal dari baris genap dari data asli.

1
mrhellmann 15 Januari 2021, 18:26

Kita dapat menggunakan subset dari base R

df2 <- subset(flights, month %in% c(11, 12))
0
akrun 15 Januari 2021, 17:59

Mungkin:

df2 <- filter (flights, month %in% c(11,12))

Kode Anda saat menggunakan == hanya dapat mempertimbangkan elemen pertama dari vektor. Juga, operator | sepertinya mengevaluasi setiap kondisi secara terpisah sedangkan == mengevaluasi kondisi secara bersamaan.

0
Duck 15 Januari 2021, 18:09

Setuju dengan @Duck tentang perbedaan antara menggunakan | dan ==

Tapi ini belum menjelaskan mengapa R memotong setiap baris lainnya.

Saya juga menjalankan dua perintah terpisah di bawah ini hanya memfilter penerbangan masing-masing pada bulan Desember atau November. Dan rata-rata pengamatan di 2 (28135 dan 27268) sama dengan # pengamatan di df2 (27702)

df3 <- filter (flights, month == 11)

df4 <- filter (flights, month == 12)

0
frankieR 15 Januari 2021, 18:24