计算长度和子串数

时间:2016-05-23 00:12:31

标签: r

我正在尝试计算以下字符串中连续1的组数:

"NA-111111111-1111111-1-1-11-111-1-1-11-111-111-1-111-11-1-11-1111-111111111111-1111111-1-1-1-11-11-1-1-1-11-11111-1-1-11-11111111-1-1-1-1-1111-1-1-1-111-1-1-1-11111-1-11111-1-1-1-1-11111-1111111-1-1-111-1-1-1111-1-1-111-111-1-1-11-11-111-11111-111-1-1111-1-1-1-111111111-1-1-1-1-1-11-1-111-1-11111-1-1-11-1-1-1-1-111111-1-1-11-1-111111-1-1111-11-1-11-1-1-11111-1-111111-11-111-111-1-11-11-1-1-1-11-1-1-1-11111-1-11111-1-111-1-11-111111-1-11-1-1-11-1111-11111-1111111-1-1-1-1111-1-1-11-111-1111-11-1-11-1-111-1111111111-1-1-11111-1-1-1-111-11111-1-1-1-1111-1-1-1-1-1111-1-1-111111111-11111-1111111-1-1-111-11-1-11111-1-1-1111111111-1-1-1-1-1-11111-11-11-1111-1-11-1-1-11111-1-1-1-1-1-11-1-11111111-1-1111-1-1111-1"

有人可以建议这样做的方法吗?我试图分割字符串,但在尝试计算片段时失败了。

示例:“NA-111111111-1111111-1-1-11-111-1-1-11”

string    quantity
11111111  1 
111111    1
1         2
11        1

3 个答案:

答案 0 :(得分:1)

您的示例字符串和输出似乎不匹配...

但我认为这就是你的意思:

string <- "NA-111111111-1111111-1-1-11-111-1-1-11"
table(strsplit(string, "-"))
#   1        11       111   1111111 111111111        NA 
#   4         2         1         1         1         1 

<强> 修改 如果您确实要删除&#34; -1&#34;,则这与您的示例输出匹配:

table(strsplit(string, "-1"))

#                1       11   111111 11111111       NA 
#       4        2        1        1        1        1 

当多个&#34; -1&#34;时出现空白。被连续删除。

答案 1 :(得分:1)

使用gregexpr的选项:

s <- "NA-111111111-1111111-1-1-11-111-1-1-11"
match <- gregexpr("1+", s)
pattern <- sapply(attr(match[[1]], "match.length"), 
                  function(i) paste0(rep("1", i), collapse = ""))
data.frame(pattern) %>% group_by(pattern) %>% 
          mutate(quantity = n()) %>% unique()

Source: local data frame [5 x 2]
Groups: pattern [5]

    pattern quantity
     (fctr)    (int)
1 111111111        1
2   1111111        1
3         1        4
4        11        2
5       111        1

答案 2 :(得分:1)

以下是facesContext.getViewRoot().getFacetsAndChildren(); str_extract

的另一个选项
table

数据

library(stringr)
as.data.frame(table(str_extract_all(s, '[^-]+')[[1]], exclude="NA"))
#       Var1 Freq
#1         1    4
#2        11    2
#3       111    1
#4   1111111    1
#5 111111111    1