提取R中字符串的特定部分仅适用于某些值



我正在R中处理字符串的数据帧。我的数据框架只有一列带有一个非常大的字符串(在文章末尾添加了dput()(。我的目标是提取___之间的文本。出于这个原因,我编码了下一条指令:

#Extract
x1$Var<- gsub('nn','_',x1$Var)
x1$Extract<- gsub(".*[__]([^.]+)[_].*", "\1", x1$Var)

但它只适用于第二排,不适用于第一排。在我的情况下,Extract应该是Silva Ayala, Henry Gabrieln (UNAM - TOLUCA, 2020-03-19)Cumbal Vargas, Kelly Salomén (ITAM - PUEBLA, 2020-03-18),但我得到了:

[1] "Modelo de gestión de riesgos para Compañías de Seguros domiciliadas en Ecuador"
[2] "Cumbal Vargas, Kelly Salomén (PUCE - Quito, 2021-03-18)" 

也许我错了regex。非常感谢您的帮助,这是我的数据:

#Data
x1 <- structure(list(Var = c("nnnModelo de gestión de riesgos para Compañías de Seguros domiciliadas en Mexiconn                    <U+FEFF> n                nnnnSilva Ayala, Henry Gabrieln (UNAM - TOLUCA, 2020-03-19)nnModelo de gestión de riesgos para Compañías de Seguros domiciliadas en Mexiconn", 
"nnnAnálisis de costos para la producción de leche en la Hacienda del Teca para el año 2020nn                    <U+FEFF> n                nnnnCumbal Vargas, Kelly Salomén (ITAM - PUEBLA, 2020-03-18)nnEl presente trabajo fue desarrollado en la Hacienda del Teca, propiedad dedicada a larnproducción de leche.rnLa investigación se centró en la manera en la que la Hacienda costeaba el litro de leche, arnpartir de esto se ...nn"
)), row.names = 54:55, class = "data.frame")

新数据:

#Data 2
x3 <- structure(list(Var = c("nnnModelo de gestión de riesgos para Compañías de Seguros domiciliadas en Mexiconn                    <U+FEFF> n                nnnnSilva Ayala, Henry Gabrieln (UNAM - TOLUCA, 2020-03-19)nnModelo de gestión de riesgos para Compañías de Seguros domiciliadas en Mexiconn", 
"nnnAnálisis de costos para la producción de leche en la Hacienda del Teca para el año 2020nn                    <U+FEFF> n                nnnnCumbal Vargas, Kelly Salomén (ITAM - PUEBLA, 2020-03-18)nnEl presente trabajo fue desarrollado en la Hacienda del Teca, propiedad dedicada a larnproducción de leche.rnLa investigación se centró en la manera en la que la Hacienda costeaba el litro de leche, arnpartir de esto se ...nn", 
"nnnDiseño de un sistema de gestión de la calidad basado en la norma Iso 9001:2008 para los procesos relacionados con el cliente en la empresa la Competencia S.A.nn                    <U+FEFF> n                nnnCadena Echeverría, Jaime Luis Hermel* (ITAM, 2014)nnEn el presente trabajo se ha diseñado la documentación requerida para un sistema derngestión de la calidad basado en la Norma ISO 9001:2008 de los procesos relacionados conrnel cliente de la empresa La Competencia S.A., ...nn"
)), row.names = c(NA, -3L), class = "data.frame")

我们可能需要将__放在[]之外,因为字符将被实际评估为_(它在[]中查找每个唯一的字符,因此如果我们有[_][__][___][_____],则所有字符都将被评估为单个_

> gsub(".*[_]([^.]+)[_].*", "\1",gsub('nn','_',x1$Var))
[1] "Modelo de gestión de riesgos para Compañías de Seguros domiciliadas en Mexico"
[2] "Cumbal Vargas, Kelly Salomén (ITAM - PUEBLA, 2020-03-18)" 
> gsub(".*[___]([^.]+)[_].*", "\1",gsub('nn','_',x1$Var))
[1] "Modelo de gestión de riesgos para Compañías de Seguros domiciliadas en Mexico"
[2] "Cumbal Vargas, Kelly Salomén (ITAM - PUEBLA, 2020-03-18)"        

如果我们想在[]中使用_,请将其作为

> gsub(".*[_]{2}([^_]+)[_].*", "\1",gsub('nn','_',x1$Var))
[1] "Silva Ayala, Henry Gabrieln (UNAM - TOLUCA, 2020-03-19)" 
[2] "Cumbal Vargas, Kelly Salomén (ITAM - PUEBLA, 2020-03-18)"

或者可以是

gsub(".*__([^_]+)_.*", "\1", gsub('nn','_',x1$Var))

-输出

[1] "Silva Ayala, Henry Gabrieln (UNAM - TOLUCA, 2020-03-19)"  
[2] "Cumbal Vargas, Kelly Salomén (ITAM - PUEBLA, 2020-03-18)"

最新更新