2015-02-10 109 views
1

我試圖使用grep函數來搜索R中的一行數據幀,但它一直返回「字符(0)」,是否有我不知道的東西知道使用grep沿行搜索?使用grep來搜索R中的行

我可以看到,我正在搜索的是在行中,但grep沒有找到它。

試過提供固定= FALSE和ignore.case = TRUE

命令:

grep("string",df[1,]) 

我可以輕鬆地使用

which(df[1,]=="string") 

但爲什麼grep的找不到字符串?

回答

3

因爲grep適用於矢量不是data.frame

數據

#> df=data.frame(col1=c("cat123","doggy"),col2=c("mydog","cat"),col3=1:2) 
#> df 
# col1 col2 col3 
#1 cat123 mydog 1 
#2 doggy cat 2 

> is.data.frame(df[1,]) 
[1] TRUE 

如果您遍歷與apply,你循環的載體的data.frame行和以下工作:

> t(apply(df,1,function(u) grepl("dog",u))) 
     [,1] [,2] [,3] 
[1,] FALSE TRUE FALSE 
[2,] TRUE FALSE FALSE 
+0

你也可以轉換成一個矩陣'「黯淡< - 」(grepl(「狗」,如。矩陣(df)),dim(df))' – akrun 2015-02-10 13:13:03

+0

永遠是最好的解決方案:)但是,你可以參考一些鏈接清楚地解釋'昏暗< - '? – 2015-02-10 13:19:05

+0

這是一種不同的分配方式,而不是分兩步書寫。即。 'm1 < - grepl('dog',as.matrix(df)); dim(m1)< - dim(df)'。我目前沒有鏈接。 – akrun 2015-02-10 13:24:17

1

如果你看的grep的代碼,你會看到在第一線的原因

if (!is.character(x)) 
    x <- structure(as.character(x), names = names(x)) 

嘗試在數據幀,並看看會發生什麼