如何基于R中的位置矢量替换字符串矢量中的字符?

问题描述 投票:2回答:2

例如:

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

我想要创建一个新列new_p,其中用p替换位置n处的s中的字符。因此,第一个df$new_p[1]应该是GPXMCEHPTEW

r gsub substr stringi
2个回答
3
投票

选项为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

我们也可以使用rawToChar/charToRaw

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

数据

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"))

0
投票

[C0的另一个选项:

© www.soinside.com 2019 - 2024. All rights reserved.