【问题标题】:how do you extract the columns that contain a certain text/string in R如何在 R 中提取包含特定文本/字符串的列
【发布时间】:2015-01-23 06:40:40
【问题描述】:

我需要能够提取包含我正在寻找的确切字符串的列。例如,我有这个数据框 x:

structure(list(Time = structure(1L, .Label = "1/1/2015", class = "factor"), 
    WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Phys.Mem.MB. = 3555L, 
    WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Phys.Mem.Free.MB. = 55L, 
    WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Swap.Free.MB. = 44L, 
    WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Cache.Free.MB. = 66L, 
    WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Swap.And.Cache.Free.MB. = 44L, 
    WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Percent.Free = 44L, 
    WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Round.Trip.Time = 44L), .Names = c("Time", 
"WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Phys.Mem.MB.", 
"WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Phys.Mem.Free.MB.", 
"WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Swap.Free.MB.", 
"WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Cache.Free.MB.", 
"WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Swap.And.Cache.Free.MB.", 
"WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Percent.Free", 
"WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Round.Trip.Time"
), class = "data.frame", row.names = c(NA, -1L))

我只需要提取包含此完全匹配“.Total.Phys.Mem.MB”的列。

当我这样做时:

x[,grepl(".Total.Phys.Mem.MB.", colnames(x)[2:ncol(x)])]

我没有得到包含此字符串的列“.Total.Phys.Mem.MB.”。有没有更好的方法来提取包含 R 中字符串的列?

【问题讨论】:

  • 试试x[, grepl("\\.Total\\.Phys\\.Mem\\.MB\\.", colnames(x))]
  • @David Arenburg,我还需要提取时间列。我试过这个:x[grepl("\\.Total\\.Phys\\.Mem\\.MB\\.", colnames(x)[2:ncol(x)])],同样,无法提取数据框中的列。

标签: regex r


【解决方案1】:
library(dplyr)

select(x, contains(".Total.Phys.Mem.MB."))
  WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Phys.Mem.MB.
1                                                                                    3555

【讨论】:

  • 你能做吗或 (|) 在 dply 包含。我试过这个 select(x, contains("Time"|".Total.Phys.Mem.MB.")),得到这个错误:操作只能用于数字、逻辑或复杂类型
【解决方案2】:

除非定义了fixed=TRUE,否则grepl 将模式识别为正则表达式;在正则表达式中,点是具有特殊含义的字符,必须对其进行转义以匹配文字。

> x[grepl("\\.Total\\.Phys\\.Mem\\.MB\\.", colnames(x))]
  WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Phys.Mem.MB.
1                                                                                    3555

> x[grepl('.Total.Phys.Mem.MB.', colnames(x), fixed=TRUE)]
  WTAD..Linux..Linux.Percent.of.Physical.Memory.and.Swap.Used.on.web02.Total.Phys.Mem.MB.
1                                                                                    3555

【讨论】:

  • 我还需要从该数据框中提取标记为 Time 的第一列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2015-01-20
  • 1970-01-01
相关资源
最近更新 更多