用R中的gsub替换字符串

时间:2017-01-29 21:29:49

标签: r string dataframe gsub

我有R 我有以下问题,想请一些建议和帮助。

我有这个数据框:

数据帧

if (!file.exists("storm")){
      dir.create("storm")} fileurl<-"https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
download.file(fileurl,destfile = "storm.csv",method = "auto")
storm1<-read.table("storm.csv",header = TRUE,sep = ",")

提取所需的变量

storm1[,c("EVTYPE","FATALITIES","INJURIES","PROPDMG","PROPDMGEXP","CROPDMG","CROPDMGEXP")]

尝试

我想整理变量,因为数据集有各种各样的名字,我只举一个例子让你们可以检查我的问题。

WINTER STORM是我想要的所有这些名字的字符串
storm1<-storm1[,EVTYPE:= sapply(EVTYPE,gsub,pattern="^WINTER STORM$|^WINTER STORM/HIGH WINDS$|^WINTER STORM HIGH WINDS$|^WINTER STORM/HIGH WIND$|^HEAVY SNOW/WINTER STORM$|^BLIZZARD/WINTER STORM$|^WINTER STORMS$","WINTER STORM")]

这就是我所做的。

我正在使用sapply更改该EVTYPE列表中的所有名称,但我的兴趣只是更改级别的名称而不是其他任何内容并保留相同的数据帧。

问题

输出只是一个变量的数据框,EVTYPE。我不知道为什么。

期望

老实说,我所见过的gsub的所有例子,似乎都是一个简单的操作,因为它只是改变字符串,所以我不明白为什么它不起作用。

有人可以提供帮助或推荐其他内容吗?

1 个答案:

答案 0 :(得分:2)

我认为您不需要在sapply使用gsub,因为|是“矢量化”的,并且您已经使用storm1$EVTYPES <- gsub(pattern="^WINTER STORM$|^WINTER STORM/HIGH WINDS$|^WINTER STORM HIGH WINDS$|^WINTER STORM/HIGH WIND$|^HEAVY SNOW/WINTER STORM$|^BLIZZARD/WINTER STORM$|^WINTER STORMS$","WINTER STORM", replacement = "WINTER STORM", x = storm1$EVTYPES) 格式化了正则表达式。这样的东西可以用于将所有这些标签压缩到“冬季风暴”:

(