R,将列添加到数据帧,子串的计数

时间:2015-10-04 15:00:16

标签: r count character substring calculated-columns

这是我想要的输出:

<div class='not-others-div'>
text text [make-this-class] text
</div>
Text text text
<div class='this-div-only'> <!-- this div only -->
text text [make-this-class] text
</div>

嗨,我的数据框有一个&#34; String&#34;如上所述。我想添加一个列&#34; numSubStrings&#34;其中包含由&#34;;&#34;分隔的子串数。 in&#34; String&#34;。

我试过了

> 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中给我1s。

请指教。 感谢。

3 个答案:

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

答案 1 :(得分:0)

我们可以使用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

答案 2 :(得分:0)

您可以使用str_count包中的stringr

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