简体   繁体   English

如何根据 R 中的位置向量替换字符串向量中的字符?

[英]How to replace characters in a string vector based on a position vector in R?

For an example:例如:

set.seed(123)
library(stringi)
df<-data.frame(p=sprintf("%s", stri_rand_strings(11, 11, '[A-Z]')), 
               n=sample(1:10, 11, 1),
               s=sprintf("%s", stri_rand_strings(11, 1, '[A-Z]')))
df
             p  n s
1  GPCMCEHPTEW  3 X
2  STDJRNJGBGX  8 P
3  VTEDZLMEPHF  6 L
4  RHVCVLTRLQA  4 Y
5  FSFVIRYDDRL  7 S
6  VZBLSCZGBRU 10 K
7  JJHCJENNYIM  8 A
8  CWKTELUBVHJ  4 O
9  IANRXAZHYRL 10 M
10 VBTJVNHUCVH  9 W
11 TZCWUKIFOXN  6 V

What I wanted is to create a new column new_p where the character in p at position n is replaced by s .我想要的是创建一个新列new_p ,其中p中位置n的字符被替换为s Thus the first df$new_p[1] should be GPXMCEHPTEW .因此第一个df$new_p[1]应该是GPXMCEHPTEW

An option would be substring一个选项是substring

for(i in seq_len(nrow(df)))  substring(df$p[i], df$n[i], df$n[i]) <- df$s[i]


df
#             p  n s
#1  GPXMCEHPTEW  3 X
#2  STDJRNJPBGX  8 P
#3  VTEDZLMEPHF  6 L
#4  RHVYVLTRLQA  4 Y
#5  FSFVIRSDDRL  7 S
#6  VZBLSCZGBKU 10 K
#7  JJHCJENAYIM  8 A
#8  CWKOELUBVHJ  4 O
#9  IANRXAZHYML 10 M
#10 VBTJVNHUWVH  9 W
#11 TZCWUVIFOXN  6 V

We could also make use of rawToChar/charToRaw我们还可以使用rawToChar/charToRaw

df$p <- mapply(function(x, y, z) rawToChar(replace(charToRaw(x), y, 
         charToRaw(z))), df$p, df$n, df$s)

data数据

df <- structure(list(p = c("GPCMCEHPTEW", "STDJRNJGBGX", "VTEDZLMEPHF", 
"RHVCVLTRLQA", "FSFVIRYDDRL", "VZBLSCZGBRU", "JJHCJENNYIM", "CWKTELUBVHJ", 
"IANRXAZHYRL", "VBTJVNHUCVH", "TZCWUKIFOXN"), n = c(3L, 8L, 6L, 
4L, 7L, 10L, 8L, 4L, 10L, 9L, 6L), s = c("X", "P", "L", "Y", 
"S", "K", "A", "O", "M", "W", "V")), class = "data.frame",
row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11"))

Another option with : 的另一种选择:

library(dplyr)

df %>% 
  rowwise() %>% 
  mutate(p_new = gsub(sprintf(paste0("^(.{",n-1,"}).(.*)")), 
                      sprintf(paste0("\\1",s,"\\2")), 
                                     p))

#>    p               n s     p_new      
#>    <chr>       <int> <chr> <chr>      
#>  1 GPCMCEHPTEW     3 X     GPXMCEHPTEW
#>  2 STDJRNJGBGX     8 P     STDJRNJPBGX
#>  3 VTEDZLMEPHF     6 L     VTEDZLMEPHF
#>  4 RHVCVLTRLQA     4 Y     RHVYVLTRLQA
#>  5 FSFVIRYDDRL     7 S     FSFVIRSDDRL
#>  6 VZBLSCZGBRU    10 K     VZBLSCZGBKU
#>  7 JJHCJENNYIM     8 A     JJHCJENAYIM
#>  8 CWKTELUBVHJ     4 O     CWKOELUBVHJ
#>  9 IANRXAZHYRL    10 M     IANRXAZHYML
#> 10 VBTJVNHUCVH     9 W     VBTJVNHUWVH
#> 11 TZCWUKIFOXN     6 V     TZCWUVIFOXN

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 根据 R 中的字符串替换字符向量的元素 - Replace elements of a character vector based on string in R 如何在 R 中明智地将元素添加到基于另一个向量 position 的向量中 - How to add elements to a vector based on another vector position wise in R 循环替换 R 中字符串/因子变量/向量中的字符 - Loop to Replace Characters in a String/Factor Variable/Vector in R 在 R 中,如何使用返回可能输出向量的歧义的所有选项替换字符串中的歧义字符? - In R, How can I replace ambiguous characters in string with all options for the ambiguity returning a vector of possible outputs? 如何使用 R 将向量中包含的字符替换为另一个字符 - How to replace characters contained in a vector with another single character using R 替换 R 中字符串向量中的第一个字符 - Replace the first characters in a vector of strings in R 如果模式来自向量,如何替换字符串? - How to replace a string of characters if the pattern comes from a vector? 如何基于r中的有序向量替换列中的所有值 - How to replace all values in a column based on an ordered vector in r 根据向量的第一个字符重新编码R中的变量 - Recode variable in R based on first characters of vector 如何找到R中向量中每个元素的文本字符串的匹配位置? - How to find the match position of a text string for each element in a vector in R?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM