2017-08-15 25 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

あなたは可能性がありlapplyまたはsapply

#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

はこのエラーになっていないとループ: – user2904120

+1

『クラス『要因』のオブジェクトに適用される「タイプ:」UseMethodでエラーが発生しました(『タイプ』) にのための適用可能な方法を』はい、パターンリストとテーブル列の両方を助けました。文字列は – user2904120

+0

ですが、解決策は複数の行列になります。テーブルにさらに列が含まれている場合、それぞれの行列にはすべて – user2904120

関連する問題