Saya ingin memilih baris dari bingkai data berdasarkan kecocokan sebagian dari string dalam kolom, misalnya kolom 'x' berisi string "hsa". Menggunakan sqldf
- jika itu memiliki like
sintaks - Saya akan melakukan sesuatu seperti:
select * from <> where x like 'hsa'
.
Sayangnya, sqldf
tidak mendukung sintaks itu.
Atau serupa:
selectedRows <- df[ , df$x %like% "hsa-"]
Yang tentu saja tidak berhasil.
Adakah yang bisa membantu saya dengan ini?
dput(head(conservedData))
.Jawaban:
Saya perhatikan bahwa Anda menyebutkan suatu fungsi
%like%
dalam pendekatan Anda saat ini. Saya tidak tahu apakah itu referensi ke%like%
dari "data.table", tetapi jika ya, Anda pasti dapat menggunakannya sebagai berikut.Perhatikan bahwa objek tidak harus a
data.table
(tetapi juga ingat bahwa pendekatan subset untukdata.frame
s dandata.table
s tidak identik):Jika itu yang Anda miliki, maka mungkin Anda baru saja mencampur posisi baris dan kolom untuk subset data.
Jika Anda tidak ingin memuat paket, Anda dapat mencoba menggunakan
grep()
untuk mencari string yang Anda cocokkan. Berikut adalah contoh denganmtcars
kumpulan data, di mana kami mencocokkan semua baris yang nama barisnya menyertakan "Merc":Dan, contoh lain, menggunakan
iris
dataset untuk mencari stringosa
:Untuk masalah Anda, coba:
sumber
grep
mendukung ekspresi reguler sehingga Anda mungkin ingin menggunakan grep sebagai^hsa-
gantinya.grep
berasal dari perintah ed g / re / p (global / regular expression / print), dan ini mengungkapkan kekuatan sebenarnya hanya untuk master ekspresi reguler-fu ;-): en.wikipedia.org/ wiki / GrepCoba
str_detect()
dari paket stringr , yang mendeteksi ada atau tidaknya pola dalam string.Berikut adalah pendekatan yang juga menggabungkan
%>%
pipa danfilter()
dari paket dplyr :Ini memfilter contoh kumpulan data CO2 (yang disertakan dengan R) untuk baris di mana variabel Perlakuan berisi substring "non". Anda dapat menyesuaikan apakah
str_detect
menemukan kecocokan tetap atau menggunakan regex - lihat dokumentasi untuk paket stringr.sumber
myDataFrame[str_detect(myDataFrame$key, myKeyPattern),]
LIKE
harus bekerja di sqlite:sumber
require()
sinirequire
fungsi.