我试图获取一个读取为要读取或转换为数字的因子的列。所有带有“stringAsFactors = FALSE”或“as.numeric”的建议都无法按预期工作。 (见附件)
data.csv是一个简单的例子,它在Notepad ++和EmEditor中没有显示奇怪的特殊字符。 “Temp”(第5行)只有一个系统错误,“rH”(第4行)只有一个。
> fTimeSeries<- read.csv2('data.csv', header = TRUE, sep=";", dec=",", stringsAsFactors=FALSE)
> head(fTimeSeries)
Station DatumZeit Temp rH Tp Ld
1 526 02.11.2010 08:36 15,9 58.4 7.7 991.1
2 526 02.11.2010 08:38 15,6 58.8 7.6 991.3
3 526 02.11.2010 08:40 14,9 60.8 7.4 991.1
4 526 02.11.2010 08:42 14,3 NA 7.4 991.4
5 526 02.11.2010 08:44 aaa 64.2 7.5 991.3
6 526 02.11.2010 08:46 14,2 64.9 7.7 991.2
> fTimeSeries[,3]
[1] "15,9" "15,6" "14,9" "14,3" "aaa" "14,2" "14,2" "13,9" "13,9" "13,6" "13,6" "13,6" "13,4" "13,4" "13,7" "13,8" "13,9" "14,1" "14,3" "14,4" "14,5" "14,2" "14,2" "14,1" "14,1" "14,2"
[27] "14,1" "14,1" "14" "14" "14,1" "14" "13,9" "13,9" "14" "14" "13,9" "14" "14,1" "14,2" "14,2" "14,2" "14,2" "14,2" "14,2" "14,2" "14,2"
在第3栏“Temp”中,我希望得到数字而在第5行,而不是“aaa”NA。
所以我试着转换它:
fTimeSeries[,3] <- as.numeric(fTimeSeries[,3], dec=',')
Warnmeldung:
NAs durch Umwandlung erzeugt
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 14 14 NA 14 NA NA 14 14 NA 14 NA NA NA NA NA NA NA NA NA
但没有成功。 as.numeric似乎只是转换没有小数分隔符的数字,即使我告诉小数点分隔符是什么。 (我也试过没有选项dec =“,”没有成功。)
最后,我尝试在这里得到一些答案中建议的水平:
> levels(fTimeSeries$Temp)
NULL
> levels(fTimeSeries[,3])
NULL
> levels(fTimeSeries)
NULL
> levels(fTimeSeries$rH)
NULL
> head(fTimeSeries)
Station DatumZeit Temp rH Tp Ld
1 526 02.11.2010 08:36 NA 58.4 7.7 991.1
2 526 02.11.2010 08:38 NA 58.8 7.6 991.3
3 526 02.11.2010 08:40 NA 60.8 7.4 991.1
4 526 02.11.2010 08:42 NA NA 7.4 991.4
5 526 02.11.2010 08:44 NA 64.2 7.5 991.3
6 526 02.11.2010 08:46 NA 64.9 7.7 991.2
我在Windows7 64位环境中使用R
答案 0 :(得分:0)
这个适用于我的模拟数据。 df$x
是一个因素
df <- data.frame(x=c("12,1","aa","15,6",61))
as.numeric(gsub(",", ".", as.character(df$x)))
# [1] 12.1 NA 15.6 61.0
使用您的示例进行更新:
您的数据:
> fTimeSeries<- read.csv2('data.csv', header = TRUE, sep=";", dec=",", stringsAsFactors=FALSE)
> head(fTimeSeries)
Station DatumZeit Temp rH Tp Ld
1 526 02.11.2010 08:36 15,9 58.4 7.7 991.1
2 526 02.11.2010 08:38 15,6 58.8 7.6 991.3
3 526 02.11.2010 08:40 14,9 60.8 7.4 991.1
4 526 02.11.2010 08:42 14,3 <NA> 7.4 991.4
5 526 02.11.2010 08:44 aaa 64.2 7.5 991.3
6 526 02.11.2010 08:46 14,2 64.9 7.7 991.2
无法识别的列:
> class(fTimeSeries$Temp)
[1] "character"
申请我的解决方案:
> fTimeSeries$Temp <- as.numeric(gsub(",", ".", as.character(fTimeSeries$Temp)))
> class(fTimeSeries$Temp)
[1] "numeric"
您的data.frame成为:
> fTimeSeries
Station DatumZeit Temp rH Tp Ld
1 526 02.11.2010 08:36 15.9 58.4 7.7 991.1
2 526 02.11.2010 08:38 15.6 58.8 7.6 991.3
3 526 02.11.2010 08:40 14.9 60.8 7.4 991.1
4 526 02.11.2010 08:42 14.3 <NA> 7.4 991.4
5 526 02.11.2010 08:44 NA 64.2 7.5 991.3
6 526 02.11.2010 08:46 14.2 64.9 7.7 991.2