我的数据框有问题。缺少的值用#标记,我找不到自动用NA替换它们的方法。
这是我的数据框:https://gofile.io/?c=BfpgbC
这是我尝试过的:
library(naniar)
df_new= testframe %>% replace_with_na(replace = list(NO2_Königsplatz = "#"))
testframe[testframe== "#"] <- NA
两者都不起作用。当我手动替换每个值时,它可以工作,但这不是一个选择,因为它花费的时间太长。
用NA替换缺少的值后,我想将所有列(而不是第一列)转换为数值以计算均值。
有什么办法解决这个问题吗?
答案 0 :(得分:1)
编辑正确的数据
这是第二种方法:
最后一步将生成有关强制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
列转换为datetime类,具体取决于下一步要做什么。