【问题标题】:Finding the number of words in each row查找每行中的单词数
【发布时间】:2011-09-07 06:55:39
【问题描述】:

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

【问题讨论】:

    标签: string r apply


    【解决方案1】:

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

    sapply(strsplit(as.character(dat$one), " "), length)
    # [1] 3 4 3 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
      

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        相关资源
        最近更新 更多