my.data.frame <- subset(data , V1 > 2 | V2 < 4)
Solusi alternatif yang meniru perilaku fungsi ini dan akan lebih tepat untuk dimasukkan dalam badan fungsi:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
Beberapa orang mengkritik penggunaan yang which
tidak diperlukan, tetapi hal itu mencegah NA
nilai - nilai dari melemparkan kembali hasil yang tidak diinginkan. Persamaan (.yaitu tidak mengembalikan baris-NA untuk NA apa pun di V1 atau V2) ke dua opsi yang ditunjukkan di atas tanpa which
akan:
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
Catatan: Saya ingin berterima kasih kepada kontributor anonim yang berusaha memperbaiki kesalahan dalam kode di atas, perbaikan yang ditolak oleh moderator. Sebenarnya ada kesalahan tambahan yang saya perhatikan ketika saya memperbaiki yang pertama. Klausa bersyarat yang memeriksa nilai-nilai NA perlu menjadi yang pertama jika ingin ditangani seperti yang saya maksudkan, karena ...
> NA & 1
[1] NA
> 0 & NA
[1] FALSE
Urutan argumen mungkin penting saat menggunakan '& ".
[
satu kebutuhan untuk membungkuswhich
atau menggunakan!is.na
kendala tambahan .which
. Jika kedua V1 dan V2 adalah NA Anda akan mendapatkan deretan NA di posisi itu jika Anda meninggalkanwhich
. Saya bekerja dengan dataset besar dan bahkan persentase yang relatif kecil dari NA akan benar-benar mengisi layar saya dengan output sampah. Beberapa orang berpikir ini adalah fitur. Bukan saya.grepl
ataugrep
dengan ini untuk juga melakukan pencocokan pola untuk baris yang diinginkan, selain persyaratan ini?Anda mencari "|." Lihat http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors
sumber
NA
s dalam kerangka data:vc <- data.frame(duzey=factor(c("Y","O","Y","D","Y","Y","O"), levels=c("D","O","Y"), ordered=TRUE), cinsiyet=c("E","E","K",NA,"K","E","K"), yas=c(8,3,9,NA,7,NA,6), Not=c(NA,1,1,NA,NA,2,1)); vc; vc[vc$cinsiyet == "E" | vc$Not < 4,]; vc[vc$cinsiyet == "E" & vc$Not < 2,]
Hanya demi kelengkapan, kita dapat menggunakan operator
[
dan[[
:Beberapa opsi
df $ name setara dengan df [["name", exact = FALSE]]
Menggunakan
dplyr
:Menggunakan
sqldf
:Output untuk opsi di atas:
sumber
sqldf
paket terlalu baik. Sangat berguna terutama ketikasubset()
mendapat sedikit menyakitkan :)