【问题标题】:How to filter or omit data by vector value?如何按向量值过滤或省略数据?
【发布时间】:2014-11-30 22:23:25
【问题描述】:

您好 Stackoverflow 社区。我研究电价动态,并有一个关于从大型 data.frame 中过滤或省略值的问题。

我的 data.frame 看起来像这样,最初有 15 个变量:

 time_stamp price; renw_elec; wday;
 01.01.2014; 12.5;  25,562.25;  3;
 02.01.2014; 14.5;  23,896.56;  4;
 03.01.2014; 17.6;  26,634.87;  5;
 04.01.2014; 12.9;  30,214,56;  6;
 05.01.2014; 10.5;  21,256.56;  0;
 06.01.2014; 20.4;  28,985.78;  1;
 07.01.2014; 22.7;  32,578.98;  2;

我试图做的是根据变量 wday 中的值过滤 data.frame。例如,省略 data.frame 中变量 wday 中值 0 和 1 的所有行,使其看起来像这样:

 time_stamp price; renw_elec; wday;
 01.01.2014; 12.5;  25,562.25;  3;
 02.01.2014; 14.5;  23,896.56;  4;
 03.01.2014; 17.6;  26,634.87;  5;
 04.01.2014; 12.9;  30,214,56;  6;
 07.01.2014; 22.7;  32,578.98;  2;

我确实尝试过使用df$wday[is.na(df$wday)]<-0 来做这件事,如 cran 上所述,但它根本不起作用。我做错了什么,或者如何以最好的方式解决这样的问题? 提前谢谢你的帮助! :)

【问题讨论】:

    标签: r


    【解决方案1】:

    使用dplyr,你也可以这样做:

    library(dplyr)
    df %>% filter(wday > 1)
    
      time_stamp price renw_elec wday
    1 01.01.2014  12.5  25562.25    3
    2 02.01.2014  14.5  23896.56    4
    3 03.01.2014  17.6  26634.87    5
    4 04.01.2014  12.9  30214.56    6
    5 07.01.2014  22.7  32578.98    2
    

    【讨论】:

      【解决方案2】:

      这是对 data.frame 的基本过滤:

      df[df$wday!=0 & df$wday!=1,]
      

      df[df$wday>1,]
      

      vec = c(0,1)
      df[!(df$wday %in% vec),]
      

      【讨论】:

      • 我认为最后一个选项可能需要用all 包装?
      • df$wday %in% vec 返回布尔向量,指示每行是 0 还是 1。为什么要使用 all 包裹它,因为它返回一个布尔值?
      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2011-11-21
      相关资源
      最近更新 更多