【问题标题】:data.table - gsub (search text and replace with value of another column)data.table - gsub(搜索文本并替换为另一列的值)
【发布时间】:2021-08-11 03:45:54
【问题描述】:

我正在寻找并替换另一列中的文本。是否可以利用 apply 系列的功能?

我正在寻找一个最好只有 data.table 和基本 R 的解决方案。(不喜欢使用其他 stringr 等包)

library("data.table")
x <- mtcars
setDT(x)
x[,x1 := lapply(gear, gsub("1",gear,qsec))]

【问题讨论】:

  • 你的意思是Map
  • 我的意思是 gsub 搜索模式,如果有模式,然后用另一列的值替换它。例如用“gear”中的值替换 qsec 中的“1”

标签: r data.table apply gsub


【解决方案1】:

我们可以使用Mapgsub

x[, x1 := unlist(Map(function(x, y) gsub("1", x,y), gear, qsec))]

-输出

> x$x1
 [1] "46.46" "47.02" "48.64" "39.44" "37.02" "20.22" "35.84" "20"    "22.9"  "48.3"  "48.9"  "37.4"  "37.6"  "38"    "37.98" "37.82" "37.42"
[18] "49.47" "48.52" "49.9"  "20.03" "36.87" "37.3"  "35.43" "37.05" "48.9"  "56.7"  "56.9"  "54.5"  "55.5"  "54.6"  "48.6" 

或使用str_replace

library(stringr)
 x[, x1 := str_replace_all(qsec, '1', as.character(gear))]

【讨论】:

  • 谢谢。地图功能听起来很棒。那语法正确吗?当我执行它时,它会尝试删除列 x1。
  • @R007 抱歉,括号放置有错字。更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多