2017-08-25 19 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中的数据操作非常有用。 –