2017-08-15 126 views
0

我想在包含長字符串的數據框列中計數多個模式匹配。計算字符串中多個模式匹配的數量

pattern<-c("AAA", "BBB", "CCC") 

df$AAA <- str_count(df$string_1, "AAA+") 
df$BBB <- str_count(df$string_1, "BBB+") 
df$CCC <- str_count(df$string_1, "CCC+") 
df$AAA <- str_count(df$string_2, "AAA+") 
df$BBB <- str_count(df$string_2, "BBB+") 
df$CCC <- str_count(df$string_2, "CCC+") 
... 

實際上,列表「模式」要長得多,所以需要在字符串上使用循環。

回答

2

你可以循環使用lapplysapply

#DATA 
pattern<-c("AAA", "BBB", "CCC") 
set.seed(42) 
df = data.frame(a = replicate(5, paste(sample(c("A", "B", "C"), 50, TRUE), collapse = "")), 
       b = replicate(5, paste(sample(c("A", "B", "C"), 50, TRUE), collapse = ""))) 

library(stringr) 
setNames(lapply(pattern, function(x) sapply(df, function(y) 
           str_count(string = y, pattern = x))), pattern) 
#$AAA 
#  a b 
#[1,] 0 0 
#[2,] 2 1 
#[3,] 0 2 
#[4,] 4 1 
#[5,] 2 2 

#$BBB 
#  a b 
#[1,] 1 2 
#[2,] 1 0 
#[3,] 2 3 
#[4,] 1 2 
#[5,] 2 1 

#$CCC 
#  a b 
#[1,] 1 0 
#[2,] 2 1 
#[3,] 2 0 
#[4,] 2 0 
#[5,] 0 1 
+0

收到這個錯誤:「錯誤在UseMethod(‘類型’): 爲沒有適用的方法‘’施加到的類‘因子’的對象」 – user2904120

+1

類型是的,它幫助模式列表和表列,如字符 – user2904120

+0

,但解決方案導致多個矩陣;如果表中包含更多的列,每個矩陣包含所有這些 – user2904120