正则表达式 – 提取字符串中第一个点之前的字符
发布时间: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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |