从 R 中的较大字符串中检索部分字符串

Retrieving a partial string from a larger string in R

我有一个数据集,其中每个观察值都有一个描述多个事物的 ID 值,例如 AE1 表示站点 A,类型 E,观察值 1。我正在尝试仅为类型生成一个列,因此在上面的示例中我我试图在删除其他数据的同时过滤掉 E。

我研究过使用 gsub,但是每个新类型模式似乎都会覆盖以前的模式。最接近我的方法是使用 gsubfn,如下所示:

library(gsubfn)

x <- c("AE1", "AE2", "AD1", "AD2", "BE1", "BE2", "BD1", "BD2")
y <- gsubfn(".", list("E" = "easy", "D" = "difficult"), x)

y

[1] "Aeasy1"      "Aeasy2"      "Adifficult1" "Adifficult2" "Beasy1"      "Beasy2"      "Bdifficult1" "Bdifficult2"

结果的问题是我仍然需要删除首字母和末尾数字。实际上我有四种类型类别,不仅仅是 "E" 和 "D"

提前致谢。

1) gsubfn 您的代码实际上已经非常接近了。而不是 "." 使用 ".(.)." 作为正则表达式。这将匹配中间将由列表处理的三个字符。三个字符的整个匹配将替换为处理结果。

library(gsubfn)

gsubfn(".(.).", list("E" = "easy", "D" = "difficult"), x)
## [1] "easy"      "easy"      "difficult" "difficult" "easy"      "easy"     
## [7] "difficult" "difficult"

2) strapply strapply 在同一个包中也可以。与其他 *apply 函数一样,它首先处理对象,然后是限定符(在本例中为正则表达式),最后是列表(或函数或原型对象)。与 gsubfn 不同,它不是将结果代回输入字符串,而是 returns 处理的结果。

strapply(x, ".(.).", list("E" = "easy", "D" = "difficult"), simplify = TRUE)
## [1] "easy"      "easy"      "difficult" "difficult" "easy"      "easy"     
## [7] "difficult" "difficult"