从 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"
我有一个数据集,其中每个观察值都有一个描述多个事物的 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"