2

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

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。谢谢

4

1 回答 1

3

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

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

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

fields <- c('INJURIES', 'FATALITIES', 'CROPDMG', 'PROPDMG')
keep   <- rowSums(storm[fields] != 0) > 0
storm[keep, ]
于 2014-07-27T19:25:22.597 回答