2015-04-22 60 views
2

我有一个看起来像这样的数据帧的随机数字:[R生成的每一行

> head(df.data) 
Date Persnr AmountHolidays Season Holiday Temp 
1 201101 55312   0.0 Off FALSE 4.8 
2 201101 55316   3.0 Off FALSE 4.8 
3 201101 55325   0.0 Off FALSE 4.8 
4 201101 76065   0.0 Off FALSE 4.8 
5 201101 71928   1.0 Off FALSE 4.8 
6 201101 72558   0.5 Off FALSE 4.8 

> str(df.data) 
'data.frame': 490 obs. of 6 variables: 
$ Date   : Factor w/ 49 levels "201101","201102",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ Persnr  : int 55312 55316 55325 76065 71928 72558 73045 77214 121216 71951 ... 
$ AmountHolidays: num 0 3 0 0 1 0.5 0 0.5 2 0 ... 
$ Season  : chr "Off" "Off" "Off" "Off" ... 
$ Holiday  : chr "FALSE" "FALSE" "FALSE" "FALSE" ... 
$ Temp   : num 4.8 4.8 4.8 4.8 4.8 4.8 4.8 4.8 4.8 4.8 ... 

我想要做的是创建两个数字的随机值,并将其粘贴背后的“日期”值。这两个数字代表了日子。 例如“20110112”或“20110106”。 我用这个已经:

df.data$Date<-paste(df.data$Date,sample(1:31,31),sep="") 

结果:

> head(df.data) 
     Date Persnr AmountHolidays Season Holiday Temp 
1 20110117 55312   0.0 Off FALSE 4.8 
2 20110114 55316   3.0 Off FALSE 4.8 
3 2011018 55325   0.0 Off FALSE 4.8 
4 20110113 76065   0.0 Off FALSE 4.8 
5 2011017 71928   1.0 Off FALSE 4.8 
6 20110110 72558   0.5 Off FALSE 4.8 

它的工作原理,但!我的问题是它并不总是生成两个数字值。值1显示为1而不是01.值2显示为2而不是02等。

任何建议如何解决此问题?

+0

尝试'的sprintf( '%S%02D',唯一的(df.data $日期),样品(1:31,31))' – akrun

+0

在该示例中,'df.data $ date'是一样的,它会改变吗? – akrun

+1

嗨minhphongb。仅供将来参考,请尝试将您的问题修正至您无法弄清楚的部分。我们不希望出现XY问题的情况,但在这种情况下,您可能会发布一条问题:“如何将1格式化为'01'?” - 也许比这个更详细一点,但如果问题很短并且重点仍然涵盖所有必要的基础,你会得到更多的答复和更好的答复。 – Dason

回答

2

尝试

paste0(df.data$Date, sprintf('%02d', sample(31)))