【问题标题】:R: Removing multiple columns from data frame based on vector valuesR:根据向量值从数据框中删除多列
【发布时间】:2015-02-19 10:03:12
【问题描述】:

我有一个数据框dataGL_all:

Date<-c("01-01-15 04:00","01-01-15 04:20","01-01-15 04:40")
FLIin<-c(96,39,72)
FLIout<-c(173,147,103)
FBEin<-c(96,116,166)
FBEout<-c(32,53,120)
dataGL_all<-data.frame(Date, FLIin, FLIout, FBEin, FBEout)

此外,我还有一个向量:

Remove <- c("FBEin", "FLIout")

我会使用一段代码从数据框 dataGL_all 中删除向量 Remove 中的列。我尝试了许多函数组合(例如 grep()、c() 和 names()),但无法正常工作......希望能得到帮助:) thx

附:我的“真实”数据框包含 68 列,我想删除其中的 36 列(向量中的列)。

【问题讨论】:

    标签: r vector


    【解决方案1】:
    dataGL_all[, !names(dataGL_all) %in% Remove]
    

    应该可以解决问题。或者,如果你想要grep

    dataGL_all[, grep(paste(Remove, collapse = "|"), names(dataGL_all), invert = T)]
    

    【讨论】:

    • 确实如此!谢谢卢克A。该网站告诉我,我必须等待 5 分钟才能接受您的回答...
    【解决方案2】:

    只是为了增加一些可能性,使用data.table 包这些操作非常简单。您可以使用 !with = FALSE 组合临时删除列。或者您可以在 data.table 环境中使用 () 评估此向量并使用 := 赋值运算符将 NULL 分配给它时,通过引用修改您的数据集,所以这里是:

    加载包并转换为data.table

    library(data.table)
    setDT(dataGL_all)
    

    然后要么做

    dataGL_all[, !Remove, with = FALSE]
    #              Date FLIin FBEout
    # 1: 01-01-15 04:00    96     32
    # 2: 01-01-15 04:20    39     53
    # 3: 01-01-15 04:40    72    120
    

    或者通过引用更新数据集

    dataGL_all[, (Remove) := NULL][]
    #              Date FLIin FBEout
    # 1: 01-01-15 04:00    96     32
    # 2: 01-01-15 04:20    39     53
    # 3: 01-01-15 04:40    72    120
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2020-02-04
      • 2016-04-07
      • 2021-06-23
      • 1970-01-01
      相关资源
      最近更新 更多