【发布时间】:2014-12-11 11:59:16
【问题描述】:
我想提取字符串列中第一个点之前的字符。我可以使用下面的代码来做到这一点。虽然,代码似乎过于复杂,我不得不求助于for-loop。有没有更简单的方法?我对regex 解决方案特别感兴趣。
请注意,查找每个字符串中的最后一个数字不适用于我的真实数据,尽管该方法适用于本示例。
感谢您的建议。
my.data <- read.table(text = '
my.string state
......... A
1........ B
112...... C
11111.... D
1111113.. E
111111111 F
111111111 G
', header = TRUE, stringsAsFactors = FALSE)
desired.result <- c(NA,1,2,1,3,NA,NA)
确定第一个点的位置:
my.data$first.dot <- apply(my.data, 1, function(x) {
as.numeric(gregexpr("\\.", x['my.string'])[[1]])[1]
})
拆分字符串:
split.strings <- t(apply(my.data, 1, function(x) { (strsplit(x['my.string'], '')[[1]]) } ))
my.data$revised.first.dot <- ifelse(my.data$first.dot < 2, NA, 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 11111.... D 6 5 1
# 5 1111113.. E 8 7 3
# 6 111111111 F -1 NA <NA>
# 7 111111111 G -1 NA <NA>
这是一个相关的帖子:
【问题讨论】: