gpt4 book ai didi

r - 通过 lapply 和正则表达式批量创建列到 R 的 data.table 中的列

转载 作者:行者123 更新时间:2023-12-02 15:43:54 24 4
gpt4 key购买 nike

我想在一些字符串之后获取值,演示如下

dt <- data.table(col.1 = c("a1, b2, c3, d4"))
x <- c("a", "b", "c")

dt[, (x) := lapply(FUN = str_match(string = .SD,
pattern = paste0("(?<=", x, ")([\\d])"))[, 2],
X = x),
.SDcols = "col.1"]

理想的结果是这样的

desirable <- data.table(col.1 = c("a1, b2, c3, d4"),
a = c("1"),
b = c("2"),
c = c("3"))

我收到如下错误信息:

*match.fun(FUN) 错误:

c("'str_match(string = .SD, pattern = paste0(\"(?<=\", x, \")([\\\\d])\"))[, ' is not a function, character or symbol", "'    2]' is not a function, character or symbol")*

但我不知道如何解决这个问题。谁能给我一些提示?

最佳答案

循环模式并使用 str_match 提取值

library(data.table)
library(stringr)
dt[, (x) := lapply(paste0("(?<=", x, ")(\\d+)"),
\(x) str_match(col.1, x)[, 2])]
col.1 a b c
1: a1, b2, c3, d4 1 2 3

或者用strcapture

pat <- paste0(sprintf("%s(\\d+)", x), collapse = ".*")
cbind(dt, dt[, strcapture(pat, col.1, setNames(rep(list(integer()), 3), x))])
col.1 a b c
1: a1, b2, c3, d4 1 2 3

关于r - 通过 lapply 和正则表达式批量创建列到 R 的 data.table 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75025868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com