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)...

4

2 回答 2

6

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

sapply(strsplit(as.character(dat$one), " "), length)
# [1] 3 4 3 1
于 2011-06-02T18:14:52.640 回答
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
于 2011-06-03T07:55:27.987 回答