【问题标题】:How to remove special character from data frame如何从数据框中删除特殊字符
【发布时间】:2015-04-24 06:56:27
【问题描述】:

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

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

数据的数字旁边有“*”。我只想隔离数字。 所以不是

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 输出删除“*”特殊字符。

grep('*',try)

【问题讨论】:

    标签: r dataframe special-characters


    【解决方案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
    

    【讨论】:

    • 如果@lukeA 的回答有效,您可以考虑检查他的回答的复选标记,以帮助未来的发帖人知道这是最有用的答案。
    猜你喜欢
    • 2023-03-25
    • 2020-06-30
    • 2018-04-16
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多