对于包含字符和日期行的列,我的数据如下所示:
"COLUMNXYZ"
第1行一切都很好
第2行是的你是对的
第3行1/5/2015 0:00
第4行1/5/2015 0:15
在读取数据csv时,时间戳记为:
42009
42009.01042等等。
我认为问题是因为列包含字符和日期行导致问题。此外,我在SO上看到了类似问题的早期解决方案,但行中只包含这些示例中的日期,并且通过应用以下代码解决了问题,但在我的情况下它不起作用。
尝试的步骤: XLSX CSV转换:
# Create a vector of Excel files to read
files.to.read = list.files(pattern="xlsx")
# Read each file and write it to csv
lapply(files.to.read, function(f) {
df = read.xlsx(f, sheet=1)
write.csv(df, gsub("xlsx", "csv", f), row.names=FALSE)
})
#Restoring the date format
DateandTime <- format(as.POSIXct(strptime(dataset$ColumnXYZ,"%m/%d/%Y %H:%M",tz="")) ,format = "%m/%d/%Y %H:%M")
#Add time stamp in a seperate column to the original dataset
dataset$Period <- DateandTime
答案 0 :(得分:0)
以下是对我和您的示例文件有用的内容:
步骤1:使用以下函数从您的唯一示例列在Excel中创建第二列:=TEXT(A2,"DD/MM/YYYY hh:mm:ss")
。不知何故,这不会影响字符串,但会将日期时间转换为字符串,这就是我所追求的。
步骤2:在R中运行以下命令(显然将路径更改为.xlsx
文件):
d = readxl::read_excel("~/SO_Examples/temp1.xlsx",
col_types = 'text')
d
# A tibble: 4 × 2
col1 col2
<chr> <chr>
1 All is well All is well
2 Yes you are right Yes you are right
3 42009 05/01/2015 00:00:00
4 42009.010416666664 05/01/2015 00:15:00
正如您所看到的,第一个原始专栏确实没有用。但是我在第1步中创建的第二个似乎没问题。从这里你可以根据需要解析日期。
希望这会有所帮助。如果你有很多excel文件,不幸的是,这可能无法很好地扩展。
<强>加成强>
对于不同的解决方案,这也不是很好,但会捕获日期,请尝试以下方法:
d = readxl::read_excel("~/SO_Examples/temp1.xlsx",
col_types = 'date')
d
# A tibble: 4 × 1
col1
<dttm>
1 <NA>
2 <NA>
3 2015-01-05 00:00:00
4 2015-01-05 00:15:00
这将产生大量警告,但正确处理日期时间。也许你可以再次运行相同的代码,这次将数据作为文本加载,并通过保留每次加载尝试的相关部分来组合这两个数据集?