我想在字符串之间变化的指定位置之后替换字符串中的所有元素。理想情况下,解决方案会在基础regex
中使用R
。
这是一个有效的例子和期望的结果:
my.last.position <- c(5, 7, 3, NA, 10)
my.data <- read.table(text='
my.string
.1.222.2.2
..1..1..2.
1.1.2.2...
.222.232..
..1..1...1
', header=TRUE, stringsAsFactors = FALSE)
my.data
desired.result <- read.table(text='
my.string
.1.22.....
..1..1....
1.1.......
.222.232..
..1..1...1
', header=TRUE, stringsAsFactors = FALSE)
desired.result
向量my.last.position
指定要在每个字符串中保留的最后位置。 data.frame
desired.result
包含所需的结果。
感谢您的任何建议。对不起,如果这是重复的。
答案 0 :(得分:2)
希望有人能提出一个比这更优雅的解决方案,但这里有:
mapply(
function(s,i) paste(collapse='',if (is.na(i)) s else c(s[seq_len(i)],rep('.',length(s)-i))),
strsplit(my.data$my.string,''),
my.last.position
);
## [1] ".1.22....." "..1..1...." "1.1......." ".222.232.." "..1..1...1"
答案 1 :(得分:1)
这是另一种方法。不确定它是否更优雅:
# as in the example output, any NAs are treated as do not mess with this
# vector element
my.last.position.NoNA <- ifelse(is.na(my.last.position),
nchar(my.data$my.string), my.last.position)
# perform the replacement
paste0(substr(my.data$my.string, 1, my.last.position.NoNA),
sapply(1:nrow(my.data), function(i) paste0(rep(".",
length=(nchar(my.data$my.string[i])-my.last.position[i])),
collapse="")))