r - 如何根据条件将字符串的特定数字替换为另一个值

标签 r replace data.table

必须指定位数,并且必须有条件触发

目标: 将字符串中的第三位替换为“4”,条件为 TYPE“^JJ”

# DT
DT <- data.table(TYPE = c("AA","JJ","JJ","BB"),CODE = c("Y008h556","Y008j576","Y008l554","Y008z546")) 

# My attempt but not work
DT[grepl("^JJ",TYPE),CODE:=substring(CODE,3,3)<-"4"]

我们有一个简单的方法来实现它吗?

最佳答案

data.table 中拿出来就可以了语法

substring(DT$CODE[grepl("^JJ",DT$TYPE)], 3, 3) <- "4"

DT
#   TYPE     CODE
#1:   AA Y008h556
#2:   JJ Y048j576
#3:   JJ Y048l554
#4:   BB Y008z546

我不完全确定为什么它在 data.table 中不起作用语法,但我认为这是因为我们正在做 CODE:=substring <- ... ,而substring预计其形式为 substring <- ... .


如果我们想使用data.table语法,我们可以使用 sub

DT[grepl("^JJ",TYPE),CODE:=sub("(.{2}).", "\\14", CODE)]

DT
#   TYPE     CODE
#1:   AA Y008h556
#2:   JJ Y048j576
#3:   JJ Y048l554
#4:   BB Y008z546

正如 @Frank 和 @chinsoon12 的评论中所建议的,使用 substring 执行此操作的其他方法是

DT[, CODE := {substring(CODE, 3, 3) <- "4"; CODE}]

DT[, CODE := `substring<-`(CODE, 3, 3, "4")]

关于r - 如何根据条件将字符串的特定数字替换为另一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512375/

相关文章:

函数开发中 knitr/data.table 组合的 R 奇怪范​​围问题

R随机化和随机化数据表的列

使标记符合 XHTML 的 Javascript 或正则表达式解决方案

python - 替换字符串中多个字符的最佳方法?

javascript - 仅当特定索引是有效数字时,如何用第二个数组覆盖数组?

r - 从 R 中的每日价格计算月 yield

r - 选择列序列 : `:` works but not `seq`

r - 在 R Shiny 中上传和查看 pdf

r - Shiny R 应用程序让用户通过套索选择修改数据框

r - 如何使用 h2o.predict 预测时间序列的 future 值