평균

2014-03-12 2 views
2

내가 나에게 평균 수를 제공하는 기능을 찾고 있어요평균

one <- c(9, 23, 43) 
two <- c("this is a new york times article.", "short article.", "he went outside to smoke a cigarette.") 

mydf <- data.frame(one, two) 
mydf 

# one         two 
# 1 9  this is a new york times article. 
# 2 23      short article. 
# 3 43 he went outside to smoke a cigarette. 

R 내 문자 벡터 단어의 평균 개수를 얻으려고 문자 벡터 "2"단어의

library(stringr) 
foo<- str_split(two, " ") # split each element of your vector by the space sign 
sapply(foo,length) # just a quick test: how many words has each element? 
sum(sapply(foo,length))/length(foo) # calculate sum and divide it by the length of your original object 
[1] 5.333333 

답변

2

또는 여기

mean(sapply(mydf$two,function(x)length(unlist(gregexpr(" ",x)))+1)) 
[1] 5.333333 
+0

'(sapply (gregexpr ("", mydf $ 2), length) +1)'같은 개념이지만 좀 더 간결합니다 .... – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto 예 좋은 지적, 그 일을 먼저하지 말아라. – Troy

+0

내 제안 *은 gregexpr에 대한 호출 횟수를 줄이기 때문에 내 제안을 사용했다면 속도 향상을 얻을 수 있다고 생각한다. 나는 또한 실제 해결책은 (1) 거기에있을 수있는 앞뒤의 공백을 먼저 제거하고 (2) 검색 용어를 "\\ s +"'와 같이 만들 것을 제안합니다. – A5C1D2H2I1M1N2O1R2T1

2

해야한다 더 정교한 방법을 사용할 수 있지만 strsplit을 사용하면 공백에서 문자열을 문자 벡터로 분할하고 문자의 길이를 계산할 수 있습니다.

mean(sapply(strsplit(as.character(mydf$two), "[[:space:]]+"), length)) 
# [1] 5.3333 
+0

stringr은 기본 방법과 매우 유사합니다. 유일한 차이점은 밑줄 인 것 같습니다. ;) – sgibb

2

내가 거기에 확신 :

여기 출력은 5.3333이 (= (7 + 2 + 7)/3)

해들리 위컴의 stringr 패키지 가능성이 가장 쉬운 방법을 제공
3

gregexpr()는 qdap 패키지 가능성이다 :

library(qdap) 
wc(mydf$two, FALSE)/nrow(mydf) 

## [1] 5.333333 

이것은 과잉이다하지만 당신은 할 수 :

word_stats(mydf$two) 

## all n.sent n.words n.char n.syl n.poly wps cps sps psps cpw spw pspw n.state proDF2 n.hapax n.dis grow.rate prop.dis 
## 1 all  3  16  68 23  3 5.333 22.667 7.667 1 4.250 1.438 .188  3  1  12  2  .750  .125 

그리고,228을열은 문장마다 단어입니다.

+0

word_stats 객체를 만들고 해당 클래스가있는 객체에 할당하면 왜 plot.word_stats (obj)가 작동하지 않습니까? – lawyeR

+0

일반'plot' 객체가 클래스에서 작동하므로 클래스를 변경했거나 새로운 클래스에 고유 한 플롯 메소드가있는 경우 일반 '플롯'이 더 이상 작동하지 않습니다. 어쨌든'word_stats'의'plot'은'qheat'의 래퍼 일 뿐이므로 여전히'qheat'를 사용할 수 있습니다. –

+0

@lawyeR이 질문에 답하지 않으면 데이터와 예제가 포함 된 새 질문을 엽니 다. –