加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 提取字符串中第一个点之前的字符

发布时间:2020-12-14 06:05:54 所属栏目:百科 来源:网络整理
导读:我想在一列字符串中提取第一个点之前的字符.我可以使用下面的代码.虽然,代码似乎过于复杂,我不得不求助于for循环.有没有更简单的方法?我特别感兴趣的是正则表达式解决方案. 请注意,查找每个字符串中的最后一个数字将不适用于我的实际数据,尽管该方法适用于
我想在一列字符串中提取第一个点之前的字符.我可以使用下面的代码.虽然,代码似乎过于复杂,我不得不求助于for循环.有没有更简单的方法?我特别感兴趣的是正则表达式解决方案.

请注意,查找每个字符串中的最后一个数字将不适用于我的实际数据,尽管该方法适用于此示例.

谢谢你的任何建议.

my.data <- read.table(text = '
     my.string  state
     .........    A
     1........    B
     112......    C
     22222....    D
     2222213..    E
     222221111    F
     222221111    G
',header = TRUE,stringsAsFactors = FALSE)

desired.result <- c(NA,1,2,3,NA,NA)

确定第一个点的位置:

my.data$first.dot <- apply(my.data,function(x) {     
                                as.numeric(gregexpr(".",x['my.string'])[[1]])[1]
                          })

拆分字符串:

split.strings <- t(apply(my.data,function(x) { (strsplit(x['my.string'],'')[[1]]) } ))

my.data$revised.first.dot <- ifelse(my.data$first.dot < 2,my.data$first.dot-1)

提取第一个点之前的字符:

for(i in 1:nrow(my.data)) {
     my.data$character.before.dot[i] <- split.strings[i,my.data$revised.first.dot[i]]
}

my.data

#   my.string state first.dot revised.first.dot character.before.dot
# 1 .........     A         1                NA                 <NA>
# 2 1........     B         2                 1                    1
# 3 112......     C         4                 3                    2
# 4 22222....     D         6                 5                    1
# 5 2222213..     E         8                 7                    3
# 6 222221111     F        -1                NA                 <NA>
# 7 222221111     G        -1                NA                 <NA>

这是一篇相关的帖子:

find location of character in string

解决方法

这是一个带有ifelse的基本R解决方案:

res <- regexpr("[^.](?=.)",my.data$my.string,perl = TRUE)
ifelse(res < 1,as.integer(regmatches(my.data$my.string,res)))
# [1] NA  2  1  3  1 NA NA

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读