2015-11-13 44 views
2

的指定位置匹配字符我有一列的數據幀與字符:R:計數在數據幀的行數,與在串

strings 
1 a;b;c;d 
2 g;h;i;j 
3  k;m 
4  o 

我想獲得的數目的計數字符串(行)在字符串中的某個位置處具有特定的特定字符。

例如,

獲得第3個字符的字符串數作爲此集中的 個字符之一:{a,b,m}。

在這種情況下,輸出應爲2,因爲只有第一行和第三行 在{a,b,m}中具有任何字符作爲 字符串中的第三個字符。

我只能用這個代碼,以查找包含「B」的任何字符串:

sum(grepl("b",df)) 

然而,這不是上述任務不夠好。 請指教。另外

sum(substr(df$strings,3,3) %in% c("a","b","m")) 

,如果你想使用;作爲分隔符,你可以這樣做::

+0

你」需要使用一些正則表達式。在這種情況下,使用「或」運算符,這將使用像這樣:「(a | b | m)」,「|」是「或」運營商。這將返回其中包含a,b或m的任何字符串。用「(a | b | m)」替換'grepl'中的「b」。 但是,我對'grepl'的使用有點困惑,因爲它會返回一個項目是否在某個東西的邏輯值,所以我不確定你爲什麼要這樣做。 – giraffehere

回答

1

試試這個

sum(sapply(strsplit(df$strings,";"),function(x) x[2] %in% c("a","b","m"))) 
+0

第一個作品。但第二個給我這個: 錯誤總和(lapply(strsplit(df $ strings,「;」),function(x)x [2]%in%: 無效'type'(參數列表) – ConanG

+0

好用'substr' – akrun

+0

@ConanG我將它更新爲'sapply()',它工作正常 –

4

您可以嘗試grepl

x = c('a;b;c;d','g;h;i;j','k;m','o') 

sum(grepl('^.{2}[abm]', x)) 
#[1] 2 
+0

不錯,不需要拖尾'。*'。也許想要一個領先的'^' – Frank

+1

我認爲OP需要第三個字符,不是第二個,所以在這種情況下{2}應該是{4}? – giraffehere

+0

Works。我還要學習更多關於正則表達式。 – ConanG