【问题标题】:Remove rows that match a value删除与值匹配的行
【发布时间】:2014-09-19 00:19:55
【问题描述】:

我正在尝试过滤掉一些数据。假设列包含一个数值,如果在所有列中都等于零,则该数值必须消失。我虽然关于执行多个匹配,所以

match1 <- match(which(storm$FATALITIES==0), which(storm$INJURIES==0))
match2 <- match(which(storm$CROPDMG==0), which(storm$CROPDMGEXP==0))
match3 <- match(which(storm$PROPDMG==0), which(storm$PROPDMGEXP==0))
match4 <- match(match1, match2)
matchF <- match(match4, match3)

但它显然不起作用,因为它给出了最后一个向量的位置...... 数据看起来像这样:

             BGN_DATE STATE  EVTYPE FATALITIES INJURIES PROPDMG PROPDMGEXP CROPDMG
1   4/18/1950 0:00:00    AL TORNADO          0       15    25.0          K       3
2   4/18/1950 0:00:00    AL TORNADO          0        0     0.0          K       0
3   2/20/1951 0:00:00    AL TORNADO          0        2    25.0          K       0
4    6/8/1951 0:00:00    AL TORNADO          0        2     0.0          K       0
5  11/15/1951 0:00:00    AL TORNADO          0        0     0.0          K       0
6  11/15/1951 0:00:00    AL TORNADO          1        6     2.5          K       0
7  11/16/1951 0:00:00    AL TORNADO          0        1     2.5          K       0
   CROPDMGEXP LATITUDE LONGITUDE REFNUM
1                 3040      8812      1
2                 3042      8755      2
3                 3340      8742      3
4                 3458      8626      4
5                 3412      8642      5
6                 3450      8748      6
7                 3405      8631      7

我有兴趣匹配删除所有为 0 的 INJURIES、FATALITIES、CROPDMG、PROPDMG 条目(所有这些条目同时)。我已经用 complete.cases() 过滤掉了 NA。 谢谢

【问题讨论】:

    标签: r dataframe match data-cleaning


    【解决方案1】:

    这里有几种方法。一种交互式且非常直观:

    subset(storm, INJURIES   != 0 |
                  FATALITIES != 0 |
                  CROPDMG    != 0 |
                  PROPDMG    != 0)
    

    和一个程序化的,因此更灵活/可扩展:

    fields <- c('INJURIES', 'FATALITIES', 'CROPDMG', 'PROPDMG')
    keep   <- rowSums(storm[fields] != 0) > 0
    storm[keep, ]
    

    【讨论】:

    • 您好,谢谢您的回答!第一个选项使用“或”逻辑运算符对吗?第二个选项将该值与 0 进行比较,然后将其与逻辑值相加,如果 T 将被强制为 1 并给出 TF。该向量适用于所有行,因为它是 rowSums()。伟大的!再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多