当前位置:  开发笔记 > 编程语言 > 正文

查找数据大写的范围的开始和结束

如何解决《查找数据大写的范围的开始和结束》经验,为你挑选了1个好方法。

我有一个data.frame ystr:

    v1
1    a
2    B
3    B
4    C
5    d
6    a
7    B
8    D

我想在CAPS中找到每组字母的开头和结尾,所以我的输出将是:

    groupId startPos    endPos
1   1       2           4
2   2       7           8

通过按顺序查看每个元素并将其与之前的元素进行比较,我能够通过for循环来完成它,如下所示:

currentGroupId <-0

for (i in 1:length(ystr[,1])){ 
  if (grepl("[[:upper:]]", ystr[i,])) 
  { 
    if (startCounter == 0) 
    {
       currentGroupId <- currentGroupId +1
       startCounter <-1 
       mygroups[currentGroupId,] <- c(currentGroupId, i, 0)
    }
  }else if (startCounter == 1){
    startCounter <-0
    mygroups[currentGroupId,3]<- i-1
  }
}

在R中有一种简单的方法吗?

这可能类似于Mark的开始和结束,但我无法弄清楚它在这种情况下是如何应用的.



1> josliber..:

您可以通过计算rle二进制指示符的行程编码()来确定数据是否为大写,这可以通过数据在转换为大写时是否等于自身来确定.

with(rle(d[,1] == toupper(d[,1])),
     data.frame(start=cumsum(lengths)[values]-lengths[values]+1,
                end=cumsum(lengths)[values]))
#   start end
# 1     2   4
# 2     7   8

您可以rle通过使用此命令查看Stack Overflow答案来查看其他使用示例.

数据:

d <- data.frame(v1=c("a", "B", "B", "C", "d", "a", "B", "D"))

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有