【问题标题】:Removing special characters from a dataframe in R从R中的数据框中删除特殊字符
【发布时间】:2017-08-05 19:36:13
【问题描述】:

我是编程(和 R)新手,在尝试从数据框中删除某些字符时遇到了问题。我从共同基金导入了一个包含 NAV 数据的 csv。导入后,我留下了一个格式如下的数据框(名为 a)。两列的类都是因子。

Date             NAV
="03/08/2017"    ="€209.0537"
="02/08/2017"    ="€208.7831"
="01/08/2017"    ="€208.7373"
etc.

我只需要不带等号、双引号、â、“逗号”和“¬”的日期和资产净值价格:

Date             NAV
03/08/2017       209.0537
02/08/2017       208.7831
01/08/2017       208.7373

我尝试使用 gsub() 作为第一步删除第一个等号和双引号:

b <- gsub(pattern = "^=\"", replacement = "", x = a)

这给了我一个长度为 2 的字符向量,我不明白。我还尝试将列的类分别强制为“日期”和“数字”,但这完全弄乱了我的数据。

最后我想要一个日期为 YYYY-MM-DD 格式的 xts,但是当其他字符被删除时,我可以自己修复日期格式和转换为 xts。

感谢任何帮助。

【问题讨论】:

    标签: r regex dataframe


    【解决方案1】:

    我们可以遍历列,使用gsub匹配不是-/.或数字的字符并将其替换为空白(""),将结果分配回数据集并将第二列转换为数字

    df1[] <- lapply(df1, function(x) gsub("[^-0-9/.]+", "", x))
    df1[,2] <- as.numeric(df1[,2])
    df1
    #        Date      NAV
    #1 03/08/2017 209.0537
    #2 02/08/2017 208.7831
    #3 01/08/2017 208.7373
    

    如果这需要转换为xts

    library(xts)
    xts(df1[-1], order.by = as.Date(df1$Date, "%m/%d/%Y"))
    #                NAV
    #2017-01-08 208.7373
    #2017-02-08 208.7831
    #2017-03-08 209.0537
    

    数据

    df1 <- structure(list(Date = structure(c(3L, 2L, 1L), .Label = c("=\"01/08/2017\"", 
    "=\"02/08/2017\"", "=\"03/08/2017\""), class = "factor"), NAV = structure(c(3L, 
     2L, 1L), .Label = c("=\"€208.7373\"", "=\"€208.7831\"",
     "=\"€209.0537\""
    ), class = "factor")), .Names = c("Date", "NAV"), row.names = c(NA, 
    -3L), class = "data.frame")
    

    【讨论】:

    • 非常感谢!第一部分解决了我的问题。我所做的唯一更改是 dat 格式(来源是 dd/mm/yyy)。你能解释一下“数据”后面的部分吗?
    • @Alexander91 你的意思是format part? i.e. %m/%d/%Y`" 它建议月份,然后是天,然后是年
    • 是的,我文件中的日期格式为 %d/%m/%Y。
    【解决方案2】:

    readrpackage 有一个函数 parse_number,它可以完全满足您的要求,而无需制定正则表达式:

    library(readr)    
    parse_number("€209.0537")
    

    产量

    209.0537

    根据需要。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2020-06-30
      • 2018-04-16
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2019-05-12
      • 2014-05-15
      • 1970-01-01
      相关资源
      最近更新 更多