2011-06-02 48 views
3

假設我想要查找數據框每一行中的字數。 因此,在下面的示例中,我想要查找第一列 中的第一個值有3個單詞,第二個值有4個單詞,依此類推。我認爲這是一個應用功能之一 的任務,但我很幸運地搞清楚了這一點。查找每行中的字數

dat = data.frame(one=c("That is Cool", 
    "I like my bank", "He likes pizza", "What")) 

我需要與strsplit()工作還是最好使用apply()功能,同時創造 功能:apply(dat, 1, function(x)...

回答

6

下面的代碼應該這樣做,假設所有用空格分開的話。

sapply(strsplit(as.character(dat$one), " "), length) 
# [1] 3 4 3 1 
+0

+1再次感謝您的幫助。 – ATMathew 2011-06-02 18:30:21

2

另一種基於正則表達式的方法。想法是消除一切,除了空間和計算修改後的字符串的長度(即空間的數量,從而+1得到字數):

nchar(gsub("[^ ]", "", dat$one)) + 1 
# [1] 3 4 3 1 

還可以添加保護處理字符串的開頭或結尾空格:

nchar(gsub("[^ ]|^ *| *$", "", dat$one)) + 1 
# [1] 3 4 3 1 

例子:

x <- c(" One two ", "One Two ", " One two") 
nchar(gsub("[^ ]", "", x)) + 1 
# [1] 4 3 3 
sapply(strsplit(x, " "), length) 
# [1] 3 2 3 
nchar(gsub("[^ ]|^ *| *$", "", x)) + 1 
# [1] 2 2 2 

一個更安全檢查:處理repeate d空格:

x <- " One Two " 
nchar(gsub("[^ ]|^ *| *$", "", gsub(" +", " ", x))) + 1 
# [1] 2