如何正确导入日期时间列?一列中的日期+时间作为 DATE
我有一个包含列的 txt 文件:序列号、时间和温度。
我试过:
test.c <- read.csv("110.txt", header = F,skip = 26, sep = "", dec = ",", col.names = "Seriennummer","Zeit","Temperatur°C")
然而,这总是给我:
这是数据在编辑器中的样子:
数据:
readLines("8.txt",n=10)
[1] "Seriennummer Zeit\tTemperatur°C"
[2] " 1 16.03.2023 15:17:33 26,8"
[3] " 2 16.03.2023 15:18:33 27"
[4] " 3 16.03.2023 15:19:33 26,8"
[5] " 4 16.03.2023 15:20:33 26,3"
[6] " 5 16.03.2023 15:21:33 26"
[7] " 6 16.03.2023 15:22:33 25,5"
[8] " 7 16.03.2023 15:23:33 25,3"
[9] " 8 16.03.2023 15:24:33 25,1"
[10] " 9 16.03.2023 15:25:33 24,9"
您可以按行读取文件,将行存储为数据框列,然后使用 {tidyr} 的
separate
函数使用两个或多个空格作为分隔符将文本拆分为列(这样只包含一个空格的日期时间不会被拆分):
library(tidyr)
data.frame(data = readLines('path_to_your_file.csv')) |>
separate(data,
sep = '[ \t]{2,}', ## at least 2 blanks/tabs needed to split by
into = c('Seriennummer', 'Zeit', 'Temperatur')
)
read.fwf
(读取固定宽度的字段)应该运行良好,但您必须计算行中的字符数以确定适当的 widths=
参数(很难从您发布的图像中分辨出来)。
我不认为 base R 会自动转换为日期时间格式,但
readr::read_fwf()
(类似于 read.fwf
但更灵活一点)可能。 可能它会正确地“根据空列的位置猜测......”(默认),你可以试试......
看起来这行得通(猜测行不通,因为它想再次拆分日期和时间……我使用了列号感知文本编辑器来找出每个字段的适当开始/结束位置)
library(readr)
read_fwf("fwf.txt",
## doesn't seem to handle header, and TAB in
## header might be problematic anyway ...
skip = 1,
## feel free to use German names instead ...
fwf_cols(n = c(9,10),
datetime = c(21,40),
temp = c(46,50)),
locale = locale(decimal_mark = ","))