studio matrices filtrar filas eliminar datos data contar columnas agregar r subset

filtrar - matrices en r



Datos de subconjuntos basados en coincidencia parcial de nombres de columna (3)

Necesito subordinar un df para incluir ciertas cadenas. Algunos de estos son nombres completos de columnas, y lo siguiente funciona bien:

testData[,c("FullColName1","FullColName2","FullColName3")]

Mi problema es que necesito expandir esto para incluir también los nombres de columna que contienen cadenas específicas que pueden coincidir parcialmente con otros nombres de columna. Estas cadenas incluyen letras y símbolos:

"PartString1()","PartString2()"

Intenté poner comodines alrededor de estos. (He indicado esto más abajo con el prefijo "estrella" porque el símbolo "*" no se representó correctamente).

testData[ ,c("FullColName1","FullColName2","FullColName3", "starPartString1()star","starPartString2()star")]

Pero me aparece un mensaje de error: se seleccionaron columnas no definidas. No puedo averiguar si o cómo necesito grep para hacer que esto funcione.


Puede usar grep para encontrar índices de nombres de columna con coincidencia parcial a un patrón particular

require(PerformanceAnalytics) data(managers) colnames(managers) #[1] "HAM1" "HAM2" "HAM3" "HAM4" "HAM5" #[6] "HAM6" "EDHEC LS EQ" "SP500 TR" "US 10Y TR" "US 3m TR"

Supongamos que el patrón que desea hacer coincidir es " HAM ", junto con algunos nombres de columna fijos ("SP500 TR" "US 10Y TR" "US 3m TR")

head(managers[,c("SP500 TR","US 10Y TR","US 3m TR",colnames(managers)[grep("HAM",colnames(managers))])]) # SP500 TR US 10Y TR US 3m TR HAM1 HAM2 HAM3 HAM4 HAM5 HAM6 #1996-01-31 0.0340 0.00380 0.00456 0.0074 NA 0.0349 0.0222 NA NA #1996-02-29 0.0093 -0.03532 0.00398 0.0193 NA 0.0351 0.0195 NA NA #1996-03-31 0.0096 -0.01057 0.00371 0.0155 NA 0.0258 -0.0098 NA NA #1996-04-30 0.0147 -0.01739 0.00428 -0.0091 NA 0.0449 0.0236 NA NA #1996-05-31 0.0258 -0.00543 0.00443 0.0076 NA 0.0353 0.0028 NA NA #1996-06-30 0.0038 0.01507 0.00412 -0.0039 NA -0.0303 -0.0019 NA NA

puede especificar varios patrones utilizando, grep("pattern1 | pattern2 ", colnames(data))


Puede utilizar grepl para una búsqueda por nombre de columna. Devuelve un vector lógico que indica coincidencias.

Aquí hay un ejemplo:

d <- read.table(header=TRUE, check.names=FALSE, text="1PartString()2 1PartString()3 OtherCol 1 2 3 3 4 5") d ## 1PartString()2 1PartString()3 OtherCol ## 1 1 2 3 ## 2 3 4 5 d[,grepl("PartString//(//)", names(d))] ## 1PartString()2 1PartString()3 ## 1 1 2 ## 2 3 4

grepl comprueba si el patrón está presente en cualquier parte del nombre, por lo que no se requiere un comodín.


Usted mencionó que puede estar buscando símbolos, por lo que para este ejemplo en particular podemos usar [[:punct:]] como nuestra expresión regular. Esto encontrará todas las cadenas con símbolos de puntuación en los nombres de columna.

d <- data.frame(1:3, 3:1, 11:13, 13:11, rep(1, 3)) names(d) <- c("FullColName1", "FullColName2", "FullColName3", "PartString1()","PartString2()") d[grepl("[[:punct:]]", names(d))] # PartString1() PartString2() # 1 13 1 # 2 12 1 # 3 11 1

Esta última parte ilustra otra forma de hacer esto con otras funciones de procesamiento de stringr de stringr

library(stringr) d[str_detect(names(d), "[[:punct:]]")] # PartString1() PartString2() # 1 13 1 # 2 12 1 # 3 11 1

AGREGAR por comentario OPs

d[grepl("ring[12()]", names(d))]

para obtener cualquiera de las subcadenas ring1() o ring2() del vector de nombres