如何从数据框中删除特殊字符

时间:2015-04-24 06:56:28

标签: r dataframe special-characters

我已从网址导入数据并使用以下代码将其转换为数据框:

url <-"http://apims.doe.gov.my/v2/hourly2.php"
tables<- readHTMLTable(url)
try<-do.call(rbind, lapply(tables, data.frame, stringsAsFactors=FALSE))

数据有&#39; *&#39;旁边的数字。我想只隔离数字。 而不是

52* 45* 67* 55*

我有

52 45 67 55

我尝试了几种方法从第3列到第8列中获取*特殊字符并将列更改为数字,但由于此字符在R中也有含义,因此这些不起作用。我试过了:

x <- "~!@#$%^&*" 
str_replace_all(x, as.character(try[,3:8]), " ") 

我也尝试过:

gsub("*","",try[,3:8])

唯一正确识别*字符的函数是grep和grapl但是我需要另一个函数来使用grep输出来删除&#39; *&#39;特殊性格。

grep('*',try)

1 个答案:

答案 0 :(得分:1)

试试这个:

dat<-do.call(rbind, lapply(tables, data.frame, stringsAsFactors=FALSE))
dat[, -(1:2)] <- sapply(dat[, -(1:2)], function(col) {
  as.numeric(sub("[*]$", "", col))
})
head(dat)
# NEGERI...STATE                 KAWASAN.AREA MASA.TIME06.00AM MASA.TIME07.00AM MASA.TIME08.00AM MASA.TIME09.00AM MASA.TIME10.00AM MASA.TIME11.00AM
# NULL.1                Johor                  Kota Tinggi               52               53               52               50               50               49
# NULL.2                Johor                  Larkin Lama               51               51               51               NA               51               51
# NULL.3                Johor                         Muar               45               45               45               45               45               45
# NULL.4                Johor                 Pasir Gudang               56               56               55               56               56               56
# NULL.5                Kedah                   Alor Setar               50               50               50               50               50               49
# NULL.6                Kedah      Bakar Arang, Sg. Petani               NA               NA               NA               NA               NA               NA