查找每行中的单词数

时间:2011-06-02 18:08:42

标签: string r apply

假设我想找到数据帧每行中的字数。 所以在下面的例子中,我想找到第一列中的第一个值 有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)...

2 个答案:

答案 0 :(得分:6)

下面的代码应该这样做,假设所有单词都用空格分隔。

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

答案 1 :(得分: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

再一次安全检查:处理重复的空格:

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