从R中的数据框中删除特殊字符

时间:2017-08-05 19:36:14

标签: r regex dataframe

我是编程(和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的字符向量,我不明白。我还试图分别将列的类强制为“Date”和“Numeric”,但这完全搞砸了我的数据。

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

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我们可以使用非gsub-/或数字的.匹配字符循环列,并将其替换为空格({{1} }),将结果返回给数据集并将第二列转换为数字

""

如果需要将其转换为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

答案 1 :(得分:1)

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

library(readr)    
parse_number("€209.0537")

产量

209.0537

根据需要。