2017-08-25 43 views
1

好吧,所以我無法弄清楚我的生活,我想根據部分字符串匹配來過濾我的數據。這裏是我的數據,我只是顯示了我想要過濾的列,但是整個集合中有更多的行。我只是想表明,「CAO」開頭的行 - 這是在觀衆方便地實現R代碼,像數據查看器一樣過濾

DataViewer的圖像:

dataviewer image

基本上我想要的R「代碼」,將重現此確切的結果。我一直在使用grepl像這樣

filter(longdata, grepl("^CAO",longdata[,1])) 

我一直在使用子集

subset(longdata,longdata[,1]=="^CAO") 

我試圖與grepl子集,無論我做什麼我不能弄明白嘗試嘗試。我是R新手,請嘗試徹底解釋。

+2

如果你閱讀子集或dplyr的任何介紹,你會發現你可以/應該使用列名而不是數字在那裏......順便說一句,是的,你需要grepl,而不是'=='。沒有一個可重複的例子,我不知道任何人都可以幫助超越。有關指導,請參閱https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250。 – Frank

+0

您是否嘗試過使用子集(longdata,grepl(「^ CAO」,longdata [,1]))? –

+0

我也是這樣想的,所以我使用了tidyverse函數「read_csv」,所以在技術上它是一個小竅門。列名中有一個空間,所以我會引用它是這樣的: '濾波器(longdata,grepl( 「^ CAO」,發行ID))' 或 '濾波器(longdata,grepl(「^ CAO「,」問題ID「))' –

回答

2

grepl wasn't在你的第一個代碼

library(tidyverse) #in this case access to dplyr and to tibble´s data_frame() function which preserves the spaces in the column names 
longdata <- data_frame(`Issue ID`=c("CAO-2017-20", "CAO-2017-20", "CAO-2017-20", "AO-2017-20", "CA-2017-20")) 
longdata %>% filter(grepl("CAO", `Issue ID`)) #patern "^CAO" also works 

%>%識別的第二個參數是通過之前的操作進一步,這裏it's通過dplyr加載的結果的管道運營商。

基本上我所做的就是加載tidyverse套件套件(請閱讀更多關於tidyverse here)。那些感興趣的是tibbledplyr。 然後創建了一個樣本數據幀與tibble的功能data_frame() 然後我施加你建議了一種調整功能,即

filter(longdata, grepl("^CAO",`Issue ID`)) 

處於其管道形式的相同:

longdata %>% filter(grepl("CAO", `Issue ID`)) 
+0

嘿,非常感謝你,這完美的作品,你能介意解釋'%>%'是什麼意思,也是單引號如何引用一個列名與空間在裏面? –

+0

很高興提供幫助。檢查更新。 'dplyr'對於R中的數據操作非常有用。 –