我是编程(和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。
感谢任何帮助。
答案 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
根据需要。