【问题标题】:R, add column to dataframe, count of substringsR,将列添加到数据框,子字符串计数
【发布时间】:2016-01-01 07:10:24
【问题描述】:

这是我想要的输出:

> head(df)
    String numSubStrings
1       1       1
2       1       1
3 1;1;1;1       4
4 1;1;1;1       4
5   1;1;1       3
6       1       1

嗨,我有一个数据框,上面有一个“字符串”列。我想添加一列“numSubStrings”,其中包含用“;”分隔的子字符串的数量在“字符串”中。

我试过了

lapply(df, transform, numSubStrings=length(strsplit(df$Strings,";")[[1]]))

这给了我 numSubStrings 中的 1。

请指教。 谢谢。

【问题讨论】:

    标签: r count character substring calculated-columns


    【解决方案1】:

    听起来您正在寻找count.fields。用法类似于:

    > count.fields(textConnection(mydf$String), sep = ";")
    [1] 1 1 4 4 3 1
    

    您可能需要将mydf$String 包装在as.character 中,具体取决于数据的读取或创建方式。

    或者,你可以试试lengths

    > lengths(strsplit(mydf$String, ";", TRUE))
    [1] 1 1 4 4 3 1
    

    【讨论】:

      【解决方案2】:

      我们可以使用gsub删除除;以外的所有字符,并将;nchar一起计数

      df$numSubStrings <- nchar(gsub('[^;]+', '', df$String))+1
      df$numSubStrings
      #[1] 1 1 4 4 3 1
      

      或者另一个选项是 stri_countlibrary(stringi) 计算 ; 字符并加 1。

      library(stringi)
      stri_count_fixed(df$String, ';')+1
      #[1] 1 1 4 4 3 1
      

      【讨论】:

        【解决方案3】:

        您可以使用stringr 包中的str_count

        x <- "    String
        1       1       
        2       1       
        3 1;1;1;1       
        4 1;1;1;1       
        5   1;1;1       
        6       1       "
        df <- read.table(text=x, header=T)
        df$numSubStrings <- str_count(df$String, "[^;]+")
        df
        #    String numSubStrings
        # 1       1             1
        # 2       1             1
        # 3 1;1;1;1             4
        # 4 1;1;1;1             4
        # 5   1;1;1             3
        # 6       1             1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-02
          相关资源
          最近更新 更多