2015-01-21 4 views
0

У меня есть этот фрейм данных, который я формирую, считывая URL-адрес. Когда я читаю URL-адрес, я получаю смешанные данные. Я хотел бы быть в состоянии сделать две вещи:как вы подмножите данные на основе регулярных выражений в R

  1. подмножество ФР, так что COLNAMES будет включать в себя только CPU.Percent в них (иногда по какой-то причине я получаю память или использование дискового пространства, мне нужно, чтобы удалить эти столбцы).

  2. COLNAMES должен включать только имена серверов, например dc1server, dc1web и т.д.

Вот мой кадр данных называется ДФ:

dput (ДФ)

structure(list(Time = structure(1:2, .Label = c("1/13/2015", 
"1/14/2015"), class = "factor"), WEB..Linux..Total.CPU.Percent.Utilization.on.dc1server.Utilization = structure(1:2, .Label = c("3.67%", 
"3.75%"), class = "factor"), WEB..Linux..Total.CPU.Percent.Utilization.on.dc1web2.Utilization = structure(c(2L, 
1L), .Label = c("13.08%", "13.25%"), class = "factor"), WTAD..Linux..Virtual.Memory.on.dc1server1.Percent.Used = structure(c(2L, 
1L), .Label = c("9%", "9.42%"), class = "factor")), .Names = c("Time", 
"WEB..Linux..Total.CPU.Percent.Utilization.on.dc1server.Utilization", 
"WEB..Linux..Total.CPU.Percent.Utilization.on.dc1web2.Utilization", 
"WTAD..Linux..Virtual.Memory.on.dc1server1.Percent.Used"), class = "data.frame", row.names = c(NA, 
-2L)) 

Для 1.

Я пробовал:

data<-subset(df, grep("CPU.Percent", colnames(df)) 

Не работает

для 2:

Я пробовал:

colnames(df)<-gsub(colnames(df), grep(".(dc1.*).",colnames(df)) 

не повезло, какие-либо идеи, что я могу делать здесь?

+0

Re: ваша попытка на 1 - помните подмножество() требует логического вектора для второго операнда, но Grep возвращает список идентификаторов столбцов. Итак, «[», как показано в решении @ blakeoft, - это путь. –

ответ

3

Как указано akrun,

data <- df[, grepl("CPU.Percent", colnames(df))] 

решает первую проблему.

А для второго, попробуйте этот

colnames(df) <- sub(".*\\.(dc[^\\.]*)\\..*", "\\1", colnames(df)) 

Обратите внимание, что изменение имен столбцов изменит способ, что первый бит кода работает. Просто убедитесь, что вы делаете их в правильном порядке.

Если вы делаете COLNAMES изменить первое, то первое решение проблемы было бы:

data <- df[,2:3] 
+0

спасибо, вы просто спасли мне массу времени. – user1471980

Смежные вопросы