我有多个以下格式的 .TXT 文件:
V1 | V2 | V3 | V4 |
---|---|---|---|
00000000000101428920180101000000+0120180101001500+01 | 0.22500000000000 | W | 千瓦时 |
00000000000101428920180101001500+0120180101003000+01 | 1.42500000000000 | W | 千瓦时 |
其中:V1,V3,V4 = 字符 & V2 = 数字
而V1(时间戳)由以下组成:
时间戳的结构如下: 例如。 20140701021500+02
2014 -> YYYY,年 // 07 -> MM,月 // 01 -> DD,日 // 02 -> hh,小时 // 15 -> 毫米,分钟 // 00 -> ss,秒 // + 02 -> [+-]zz,时区
我的目标是将每小时数据汇总为每个 ID 的每日千瓦时值。
所需的最终输出应如下所示:
id | 开始日期 | 千瓦时 |
---|---|---|
1045289 | 14.01.01 | 12.5000 |
1045289 | 14.02.01 | 17.4820 |
我设法单独对每个文件执行此操作,但不能同时对所有文件执行此操作。特别是,我在将单个 .TXT 文件合并为一个文件时遇到了麻烦。
对于单个 .TXT 文件,我使用以下代码进行聚合:
daten <- read.fwf("daten.txt", widths = c(18, 17, 17, 30, 2, 5),
col.names = c("ID", "start_date", "end_date", "kWh", "wahr", "unit"))
daten$start_date <- as.POSIXct(strptime(substr(daten$start_date, 1, 14), format = "%Y%m%d%H%M%S"), tz = "UTC")
daten$end_date <- as.POSIXct(strptime(substr(daten$end_date, 1, 14), format = "%Y%m%d%H%M%S"), tz = "UTC")
daten <- daten %>%
select(ID, start_date, end_date, kWh = kWh, wahr, unit)
data_dailyvalues <- daten %>%
group_by(ID, start_date = as.Date(start_date)) %>%
summarize(e_kwh = sum(kWh), .groups = 'drop')
为了合并 .TXT 文件,我使用了:
data <- list.files(
pattern = "*.TXT",
full.names=T) %>%
lapply(read_delim) %>%
bind_rows()
)
但我收到以下错误消息:
Error in `bind_rows()`:
! Can't combine `..9$0.00000000000000` <double> and `..10$0.00000000000000` <character>.
Run `rlang::last_trace()` to see where the error occurred.
Warning messages:
1: One or more parsing issues, call `problems()` on your data frame for details, e.g.:
dat <- vroom(...)
problems(dat)
...
非常感谢您的帮助。
看起来
read_delim
对不同文件的列类型进行了不同的猜测(即,它将一个解释为双精度,一个解释为字符)。因此,它无法绑定结果数据帧之间的列。
您可以通过在
col_types
中显式提供 read_delim
参数来覆盖(不正确的)猜测。在没有看到原始数据的情况下很难提供您需要的确切代码,但这就是一般想法......