所有
当我需要清理数据集时,我遇到了这种情况。具体来说,我需要用模式列表清理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)