2017-07-14 7 views
0

リスト内の単語または語句の出現頻度を、別のソースリストに基づいて数えます。
私は著者と研究分野のデータフレームを持っています。各著者には、その名前に関連する1つ以上の研究分野(単語/語句)のリストがあります。
同じ調査領域が複数回表示されることがあり、毎回カウントされるようにしたい(つまり、一意のリストではない)場合があります。
私は著者の研究分野が研究分野のセットリストのものと一致する回数を数える必要があります。
著者ごとに行うことはできますが、著者のリスト全体ではできません。
(実際には、ライフサイエンス、社会科学などの研究カテゴリに分けられた4つのリストがあり、それぞれの研究カテゴリ、つまりライフサイエンス分野の数 は単純な例は、1つの研究カテゴリの下にあるが、実際の例では4つの別々のユニークな「語彙」はあるなど、そのリストにあるどのように多くの社会科学分野、自分のリストにある。Rの2番目のリストに基づいて1つのリストの単語頻度を合計する

test.small <- data.frame(AuthorID=c("Mavis", "Cleotha", "Yvonne"), 
        RA=c("Fisheries, Fisheries, Geography, Marine Biology", "Fisheries", 
          "Marine Biology, Marine Biology, Fisheries, Zoology")) 
RA.text <- as.character(test.small$RA) 
RA.list <- strsplit(RA.text, ", ", perl=TRUE) 
lexicon <- c("Fisheries", "Marine Biology") 

sum(RA.list[[3]] %in% lexicon) 

個々の著者の合計発生量を個別に合計して
をリスト全体で合計し、その数値合計を他の計算に使用できるベクトルに格納するにはどうすればよいですか?

+2

その巨大なフォントですべてを書き込まないでください。 – digEmAll

+1

申し訳ありません、digEmAll!それを意味しませんでした。 amonkが私のために修正したように見えます - ありがとう! –

+0

@TessaFrancisだからこそモンクが存在する。 – amonk

答えて

1

関数を作成し、lapplyを使用してその関数をすべての行に適用できます。私が正しくあなたの質問を理解している場合、私のために、次の作品は、:

test.small <- data.frame(AuthorID=c("Mavis", "Cleotha", "Yvonne"), 
         RA=c("Fisheries, Fisheries, Geography, Marine Biology", "Fisheries", 
           "Marine Biology, Marine Biology, Fisheries, Zoology")) 

frequency_counter <- function(x,lexicon) 
{ 
x<- as.character(x) 
RA.list <- strsplit(x, ", ", perl=TRUE) 
count = sum(RA.list[[1]] %in% lexicon) 
return(count) 
} 

# apply the function 
lexicon <- c("Fisheries", "Marine Biology") 
test.small$count = lapply(test.small$RA,function(x) frequency_counter(x,lexicon)) 
1

我々はstringrパッケージからstr_countを使用することができます。次の例では、test.small2は、ワード数を示す列Countのデータフレームです。

test.smallを作成するときにstringsAsFactors = FALSEを追加して、すべての列が因子ではなく文字であることを確認していることに注目してください。

or1は、正規表現構文|を作成するrebusパッケージの関数です。

str_countを使用すると、おそらくstrsplitの文字列は必要ありません。

# Create example data frame 
test.small <- data.frame(AuthorID=c("Mavis", "Cleotha", "Yvonne"), 
         RA=c("Fisheries, Fisheries, Geography, Marine Biology", "Fisheries", 
           "Marine Biology, Marine Biology, Fisheries, Zoology"), 
         stringsAsFactors = FALSE) 

# Load packages 
library(dplyr) 
library(stringr) 
library(rebus) 

# Define the lexicon 
lexicon <- c("Fisheries", "Marine Biology") 

# Create a new column showing the total number of words matching the lexicon 
test.small2 <- test.small %>% mutate(Count = str_count(RA, or1(lexicon))) 
関連する問題