你如何基于R中的正则表达式对数据进行子集化

时间:2015-01-21 15:42:33

标签: r

我有这个数据框,我正在阅读一个网址。当我读到网址时,我得到了一些混合数据。我希望能够做两件事:

  1. 将df子集化,以便colnames只包含CPU.Percent(有时由于某种原因我得到内存或磁盘利用率,我需要删除这些列)。

  2. colnames只应包含服务器名称,例如dc1server,dc1web等。

  3. 这是我的数据框,名为df:

    dput(DF)

    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))
    

    无效

    for 2:

    我试过了:

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

    没有运气,任何想法我在这里做什么?

1 个答案:

答案 0 :(得分:3)

正如akrun所说,

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

解决了第一个问题。

对于第二个,试试这个

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

请注意,更改列名将改变第一位代码的工作方式。请确保按正确的顺序执行这些操作。

如果您首先更改了colnames,那么第一个问题解决方案将是:

data <- df[,2:3]