使用正确的数据进行编辑
这是第二种方法:
- “按原样”读取数据
- 将日期时间列从字符转换为日期时间
- 假设其他列中的任何非数字条目 = NA
- 将所有其他列从字符转换为整数
最后一步将生成有关强制 NA 值的警告,可以忽略。我们可以使用lubridate 和dplyr 包:
library(dplyr)
library(lubridate)
dat <- read.table("AUG-2017-Air.dat",
stringsAsFactors=FALSE) %>%
mutate(Zeitpunkt = dmy_hm(Zeitpunkt)) %>%
mutate_if(is.character, as.integer)
请注意,除非另有说明,否则时区假定为 UTC。
结果:
str(dat)
'data.frame': 8760 obs. of 13 variables:
$ Zeitpunkt : POSIXct, format: "2017-01-01 01:00:00" "2017-01-01 02:00:00" "2017-01-01 03:00:00" "2017-01-01 04:00:00" ...
$ NO2_Bourgesplatz : int 31 31 29 30 29 28 27 29 28 25 ...
$ NO2_Karlstraße : int 34 35 31 31 31 32 38 35 33 29 ...
$ NO2_Königsplatz : int 29 29 28 28 27 27 26 28 28 23 ...
$ NO2_LfU : int 31 31 29 28 27 26 25 23 22 24 ...
$ O3_Bourgesplatz : int 6 5 2 2 2 2 2 2 2 8 ...
$ O3_LfU : int 4 3 3 3 3 3 3 3 3 5 ...
$ PM10_Bourgesplatz: int 455 417 106 90 87 93 85 79 91 77 ...
$ PM10_Karlstraße : int 203 75 58 53 55 60 51 45 48 48 ...
$ PM10_Königsplatz : int 215 75 62 51 64 63 69 51 50 64 ...
$ PM10_LfU : int 376 321 62 101 61 112 123 112 118 147 ...
$ PM25_Bourgesplatz: int 267 308 100 87 87 94 88 80 92 79 ...
$ PM25_LfU : int 160 112 48 62 50 65 62 66 65 76 ...
使用 BASE R 解决方案进行编辑
dat <- read.table("AUG-2017-Air.dat",
stringsAsFactors=FALSE)
dat[2:13] <- lapply(dat[2:13], as.numeric)
数据不正确的旧答案
您可以在将数据导入 R 时指定哪些值表示缺失值。一般而言,如果不确定数据,最好按“原样”阅读,探索然后找出该特定数据集的怪癖,然后返回并修复它。
对于您问题中链接的数据,这应该有效:
testframe <- read.table("testframe.dat",
sep = "",
na.strings = c(" # ",
" -"),
stringsAsFactors=FALSE)
结果:
str(testframe)
'data.frame': 1095 obs. of 13 variables:
$ Zeitpunkt : chr "01.01.2017 07:00" "01.01.2017 14:00" "01.01.2017 21:00" "02.01.2017 07:00" ...
$ NO2_Bourgesplatz : int 27 22 41 22 20 36 35 24 23 12 ...
$ NO2_Karlstraße : int 38 49 53 38 54 45 47 61 32 19 ...
$ NO2_Königsplatz : int 26 25 46 26 35 30 33 31 19 8 ...
$ NO2_LfU : int 25 16 36 19 13 26 24 17 18 9 ...
$ O3_Bourgesplatz : int 2 22 2 23 32 12 8 41 36 55 ...
$ O3_LfU : int 3 31 4 28 48 22 23 55 47 67 ...
$ PM10_Bourgesplatz: int 85 54 74 32 18 11 18 11 13 6 ...
$ PM10_Karlstraße : int 51 37 69 34 21 15 23 17 17 11 ...
$ PM10_Königsplatz : int 69 36 59 26 21 12 18 15 13 8 ...
$ PM10_LfU : int 123 35 68 30 12 6 16 11 14 6 ...
$ PM25_Bourgesplatz: int 88 61 53 32 19 12 15 11 11 6 ...
$ PM25_LfU : int 62 42 61 24 15 9 15 11 12 5 ...
您还可以考虑将Zeitpunkt 列转换为日期时间类,具体取决于您接下来要执行的操作。