如何将模式列表应用于R

时间:2017-11-13 18:08:12

标签: r design-patterns replace

所有

当我需要清理数据集时,我遇到了这种情况。具体来说,我需要用模式列表清理EVTYPE变量。 有人知道如何解决这个问题吗?

我有一个dtaset:

> str(truncData)
'data.frame':   902297 obs. of  8 variables:
 $ STATE__    : num  1 1 1 1 1 1 1 1 1 1 ...
 $ EVTYPE     : Factor w/ 985 levels "   HIGH SURF ADVISORY",..: 834 834 834 834 834 834 834 834 834 834 ...
 $ FATALITIES : num  0 0 0 0 0 0 0 0 1 0 ...
 $ INJURIES   : num  15 0 2 2 2 6 1 0 14 0 ...
 $ PROPDMG    : num  25000 2500 25000 2500 2500 2500 2500 2500 25000 25000 ...
 $ CROPDMG    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ sum.inj.fat: num  15 0 2 2 2 6 1 0 15 0 ...
 $ sum.dmg    : num  25000 2500 25000 2500 2500 2500 2500 2500 25000 25000 ...

EVTYPE字段有杂乱的数据,并且由于大写,小写,空格在将数据放入系统时使用不正确,因此相同的事件具有不同的值。 我有一个标准的事件类型列表,我用它来创建模式列表

                     EVTYPE DESIGNATOR                pattern
1 Astronomical Low Tide          Z ^Astronomical Low Tide
2           Avalanche            Z           ^Avalanche  
3            Blizzard            Z            ^Blizzard  
4       Coastal Flood            Z       ^Coastal Flood  
5      Cold/Wind Chill           Z      ^Cold/Wind Chill 
6          Debris Flow           C          ^Debris Flow 

我尝试将模式列表应用于数据集以定义和替换不正确的值。 这可能是一项非常艰苦的运动,但要手动完成我想做的最后一件事。

我也尝试编写一个函数,但结果并不是我真正期望的:

find.pattern<- function(dataset, pattern, var.replace) {
        var1 <-  subset(dataset
                        , grepl(pattern
                                , dataset[2]
                                , ignore.case = T 
                                )
                        )
        var1 <- gsub(pattern, var.replace, var1)
        return(var1)
    }
x <- mapply(find.pattern
            ,truncData
            , types.list$pattern
            , types.list$EVTYPE)

结果是:

    > str(x)
List of 48
 $ STATE__    : chr(0) 
 $ EVTYPE     : chr(0) 
 $ FATALITIES : chr(0) 
 $ INJURIES   : chr(0) 
 $ PROPDMG    : chr(0) 
 $ CROPDMG    : chr(0) 
 $ sum.inj.fat: chr(0) 
 $ sum.dmg    : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 
 $ NA         : chr(0) 

0 个答案:

没有答案