1

単語で構成されたリストがあります。

> head(splitWords2)
[[1]]
 [1] "Some"        "additional"  "information" "that"        "we"          "would"       "need"        "to"          "replicate"   "the"        
[11] "experiment"  "is"          "how"         "much"        "vinegar"     "should"      "be"          "placed"      "in"          "each"       
[21] "identical"   "container"   "or"          "what"        "tool"        "use"         "measure"     "mass"        "of"          "four"       
[31] "different"   "samples"     "and"         "distilled"   "water"       "rinse"       "after"       "taking"      "them"        "out"        

[[2]]
 [1] "After"       "reading"     "the"         "expirement"  "I"           "realized"    "that"        "additional"  "information" "you"        
[11] "need"        "to"          "replicate"   "expireiment" "is"          "one"         "amant"       "of"          "vinegar"     "poured"     
[21] "in"          "each"        "container"   "two"         "label"       "containers"  "before"      "start"       "yar"         "and"        
[31] "three"       "write"       "a"           "conclusion"  "make"        "sure"        "results"     "are"         "accurate" 

リスト全体の合計出現回数ではなく、リストの各要素の出現回数をカウントしたい単語のベクトルがあります。

パッケージの機能と機能の1つをstr_count()組み合わせる方法だと思いますが、機能させることができません。stringr*ply()

numWorder1 <- sapply(ifelse(str_count(unlist(splitWords2), ignore.case("we" ) )> 0, 1, 0))

ここで、"we" は最終的に の出現回数をカウントする単語のベクトルからの単語になります。

私の理想的な出力は次のようになります。

lineNum       count
   1           0
   2           1
   3           1
   4           0
  ...         ...

助言がありますか?

4

4 に答える 4

6

特定の単語の場合:

words <- list(a = c("a","b","c","a","a","b"), b = c("w","w","q","a"))
$a
[1] "a" "b" "c" "a" "a" "b"

$b
[1] "w" "w" "q" "a"
wt <- data.frame(lineNum = 1:length(words))
wt$count <- sapply(words, function(x) sum(str_count(x, "a")))
  lineNum count
1       1     3
2       2     1

ベクトルwにカウントしたい単語が含まれている場合:

w <- c("a","q","e")
allwords <- lapply(w, function(z) data.frame(lineNum = 1:length(words), 
            count = sapply(words, function(x) sum(str_count(x, z)))))
names(allwords) <- w
$a
  lineNum count
a       1     3
b       2     1

$q
  lineNum count
a       1     0
b       2     1

$e
  lineNum count
a       1     0
b       2     0
于 2012-07-09T21:45:24.907 に答える
4

このようなもの:

wordlist <- list(
    c("the","and","it"),
    c("we","and","it")
)
require(plyr); require(stringr)
> ldply(wordlist, function(x) str_count(x, "we"))
  V1 V2 V3
1  0  0  0
2  1  0  0
于 2012-07-09T21:35:42.237 に答える
2
library(qdap)

#create a fake data set like yours:
words <- list(first = c("a","b","c","a","a","bc", "dBs"), 
    second = c("w","w","q","a"))
## termco functions require sentence like structure in a data frame so covert:
words2 <- list2df(lapply(words, paste, collapse = " "), "wl", "list")[2:1]


## trailing and leading spaces are important in match terms
## both a trailing and leading space will match exactly that trerm
termco(text.var=words2$wl, grouping.var=words2$list, match.list=c(" a "))
termco(words2$wl, words2$list, match.list=c(" b ", " a "))

## notice no space at the end of b finds and case of b + any.chunk
termco(words2$wl, words2$list, match.list=c(" b", " a "))

## no trailing/leading spaces means find any words containing the chunk b
termco(words2$wl, words2$list, match.list=c("b", " a "))

#ignores case
termco(words2$wl, words2$list, match.list=c("b", " a "), ignore.case=T)

## Last use yields:
## 
##     list word.count  term(b) term( a )
## 1  first          7 3(42.86)  2(28.57)
## 2 second          4        0     1(25)
## Also:


## transpose like function that transposes a raw matrix 
with(words2, termco2mat(termco(wl, list, match.list=c("b", " a "))))

## Which yields raw.score(percentage):
## 
##   first second
## b     2      0
## a     2      1

termcoは、実際にはdata.framesのリストであるクラスを作成することに注意してください。

raw =生の頻度カウント(数値)prop =カウントの比率(数値)rnp = rawと比率の組み合わせ(文字)

スコットの例を使用して:

words <- list(
    first=c("the","and","it", "we're"),
    second=c("we","and","it")
)
words2 <- data.frame(list=names(words), 
    wl=unlist(lapply(words, paste, collapse=" ")))

termco(words2$wl, words2$list, match.list=c(" we ", " we"))
termco(words2$wl, words2$list, match.list=c(" we ", " we"), short.term = FALSE)
于 2012-07-10T12:21:45.627 に答える
0

簡単にするために、基本パッケージのgrepにいつでも固執することができます...

LinesList <- list ( "1"=letters[1:10], "2"=rep(letters[1:3],3) )
CountsA <- grep("[a]", LinesList) # find 'a' in each element of list
length(CountsA) <- length(LinesList) # gives NAs if not counted
data.frame( lineNum = names(LinesList), count = CountsA)
于 2012-08-14T22:46:41.030 に答える