2016-12-05 16 views
2

我嘗試使用stringr中的str_match,它適用於一個簡單的測試示例。不過,這並不對數據進行工作,從rtweet回來:使用str_match從rtweet數據幀中的字段

這是一個虛構的數據幀,它確實工作:

test <- data.frame(c(1), c('something')) 
names(test) <- c('value', 'item') 

subset(test, !anyNA(str_match(item,'thing'))) 

,給出了一個匹配和不過濾項目出來,產生:

value  item 
1  1 something 

將其更改爲別的東西:

subset(test, !anyNA(str_match(item,'thang'))) 

。 ..filters項目出來,符合市場預期:

[1] value item 
<0 rows> (or 0-length row.names) 

但在來自rtweet回來似乎並沒有能夠在數據幀中的「mentions_screen_name」字段以子集是這樣的。其他邏輯操作(如mentions_screen_name == ...)可用於選擇列。但!anyNA(str_match(mentions_screen_name, '...'))將不起作用,即使您在該字段的確切文字上匹配。

我想發送看起來不能被 str_match選中的數據。但獲取數據的腳本使用的是rtweet,而 需要Twitter應用程序憑據。

像我說的簡單的例子工程,雖然。 rtweet數據有什麼不同嗎?

+0

'str_match'用於提取實際的匹配,但我認爲你應該使用'str_detect';如果模式在字符串中,它會返回一個邏輯結果。這樣你就不必使用'!anyNA'來查看是否匹配。 –

+0

@MattMills有沒有什麼情況下'str_detect(haystack,needle)'和'!anyNA(str_match(haystack,needle))'會給出不同的結果?我不是R程序員,但親自看到了這個案例(並建議詢問StackOverflow)。無論如何,如果您想通過複製/粘貼將mentions_screen_name字段取出並將其用作「乾草堆」,它可以在孤立的調用中使用。然而,不知怎的,將它作爲「子集」操作的邏輯並沒有,而對於該字符串的文字相等性測試卻是如此。 : - /在這種情況下,某人會做什麼樣的健康檢查? – HostileFork

回答

1

提及,hashtags等的數據結構目前是通過將每個推文的值摺疊成由逗號分隔的單個字符串而創建的字符向量。下一個版本的rtweet將包含一些實用功能,使處理這個結構變得更容易一些。在此期間,您可以轉換成提到一個列表對象:

strsplit(mentions, ",") 

或者使用如grep/grepl功能來搜索字符串中的匹配。

我不完全相信這會回答你的問題,所以如果我誤解了你,我很抱歉。

+0

非常感謝你! –