2015-10-08 49 views
1

在R腳本中,我有一個函數可以在具有特定擴展名的目錄中創建文件的數據框。等效於R中的SQL LIKE運算符

數據幀始終是兩列,但行數很多,因爲有特定擴展名的文件。

數據幀最終看起來是這樣的:

|   Path   | Filename | 
|:------------------------:|:-----------:| 
| C:/Path/to/the/file1.ext | file1.ext | 
| C:/Path/to/the/file2.ext | file2.ext | 
| C:/Path/to/the/file3.ext | file3.ext | 
| C:/Path/to/the/file4.ext | file4.ext | 

原諒我表達這個問題archaeic方式。我知道在SQL中,您可以使用where函數like而不是=。所以我可以說'哪裏的文件名像'%1%',並且會提取名稱中包含1的所有文件。有沒有辦法像這樣使用R來設置變量?

我有幾個不同的腳本,需要使用從這個數據框拉出的文件名。我能想到的唯一可靠的方法是告訴腳本從哪一個方面進行設置,就是設置一個像這樣的變量。

最終我想這兩個(僞)表達式產生相同的事情。

x <- file1.ext 

x like '%1%' 

都應該給X = file1.ext

+0

什麼是你想拉約通配符? –

+0

@ user1886721我不確定我是否理解,但我希望能夠通過像'x like%1%'而不是'x < - file1.ext一樣設置一個等於'file1.ext'的變量' – David

+0

@ user1886721我想它相關的說,我想這兩個表達式產生相同的值設置爲x – David

回答

2

你可以使用grepl()爲this answer

subset(a, grepl("1", a$filename)) 

或者,如果您是從SQL背景的人,你可能想看看sqldf

+0

這不起作用。當我使用'paste0(子集(a,greql(「1」,$ filename)))'它返回''字符(0)「」字符(0)「' – David

+0

好吧,我輸入了不正確的列名這就是爲什麼它沒有返回。 但是,它正在返回一個表。它應該只返回文件名。或者第二列條目。現在在這一點上,這很容易與我想要做的工作,但我雖然我指出,它不完全是我所要求的。 – David

+0

您可以將[,2]添加到上述公式中。 –

3

可以使用從data.tablelike在這裏得到你的SQL樣的行爲。 從文檔看這個例子

library(data.table) 
DT = data.table(Name=c("Mary","George","Martha"), Salary=c(2,3,4)) 
DT[Name %like% "^Mar"] 

您的問題假設你有一個data.framedf這樣

        path filename 
1:   C:/Path/to/the/file1.ext file1.ext 
2:   C:/Path/to/the/file2.ext file2.ext 
3:   C:/Path/to/the/file3.ext file3.ext 
4:   C:/Path/to/the/file4.ext file4.ext 

library(data.table) 
DT<-as.data.table(df) 
DT[filename %like% "1"] 

應該給

     path filename 
1: C:/Path/to/the/file1.ext file1.ext