首先,我想指出在stackoverflow中提出的其他问题无法将我带到正确的答案。由于不允许对任何问题发表评论,因此我在此处进行此项输入。
head(mw1)
Datum Schluss
1 19.07.2010 1.089,31
2 19.07.2010 1.093,51
3 19.07.2010 1.088,38
4 19.07.2010 1.110,10
5 19.07.2010 1.117,45
6 19.07.2010 1.129,74
请注意,mw1$Datum
是一个因素,如果我想通过运行as.Date(mw1$Datum)
将其转换为日期,则会发生以下错误:
Error in charToDate(x) :
character string is not in a standard unambiguous format
根据此处提出的其他问题,可能的解决方案可能是:
mw1$Datum <- factor("19.07.2010")
as.Date(mw1$Datum, format = "%d/%m/%y")
但是,它只生成NA而不是正确的日期。 如果有人可以帮助我解决这个问题,我将非常高兴!
最佳 targa
答案 0 :(得分:1)
让我们逐步进行。
df <- read.table(header = T, text = "Datum Schluss
1 19.07.2010 1.089,31
2 19.07.2010 1.093,51
3 19.07.2010 1.088,38
4 19.07.2010 1.110,10
5 19.07.2010 1.117,45
6 19.07.2010 1.129,74")
================================================ =====================
> str(df)
'data.frame': 6 obs. of 2 variables:
$ Datum : Factor w/ 1 level "19.07.2010": 1 1 1 1 1 1
$ Schluss: Factor w/ 6 levels "1.088,38","1.089,31",..: 2 3 1 4 5 6
好的,我们有指定的因素。
================================================ =====================
# Read Datum as a date in the specified format and put it back into df.
# %d = day of the month
# %m = month
# %Y = year
# Don't forget the points between the numbers as we have them in the data.
df$Datum <- as.Date(df$Datum, format = "%d.%m.%Y")
再次检查数据:
> str(df)
'data.frame': 6 obs. of 2 variables:
$ Datum : Date, format: "2010-07-19" ...
$ Schluss: Factor w/ 6 levels "1.088,38","1.089,31",..: 2 3 1 4 5 6
好的,现在我们有约会!
================================================ =====================
# Remove the 1000's marks
df$Schluss <- gsub("\\.", "", df$Schluss)
# Change decimal commas into points
df$Schluss <- gsub("\\,", "\\.", df$Schluss)
# Convert into numeric
df$Schluss <- as.numeric(df$Schluss)
再次检查数据:
> str(df)
'data.frame': 6 obs. of 2 variables:
$ Datum : Date, format: "2010-07-19" ...
$ Schluss: num 1089 1094 1088 1110 1117 ...
现在它们是数字了!
此视图不会显示小数点后的数字,但请放心,它们仍然存在。
================================================ =====================
> df
Datum Schluss
1 2010-07-19 1089.31
2 2010-07-19 1093.51
3 2010-07-19 1088.38
4 2010-07-19 1110.10
5 2010-07-19 1117.45
6 2010-07-19 1129.74
看上去并没有很大不同,但是现在您可以使用此数据进行进一步的计算和转换。