我正在尝试计算以下字符串中连续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
答案 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