2016-09-09 5 views
1

に独立した年と月の列を組み合わせる:私はこのようなデータフレーム(DF)を持つ単一日付列

code  year month 
1 YYOOGG 2011 8 
2 YYOOGG 2011 1 
3 YYOOGG 2011 4 
4 YYOOGG 2011 3 
5 YYOOGG 2011 12 
6 YYOOGG 2011 9 

と私はこのような日と4番目の列を作成する必要があります。

code  year month Date 
1 YYOOGG 2011 8  2011-08 
2 YYOOGG 2014 1  2014-01 
3 YYOOGG 2016 4  2016-04 
4 YYOOGG 2009 3  2009-03 
5 YYOOGG 2000 12 2000-12 
6 YYOOGG 2010 9  2010-09 

私はこの試みた:

df$Date <- as.Date(paste(df$year, df$month, sep="-"), "%Y-%M") 

を私は日付として、以下の取得:

2011-09-09

答えて

3

df$Date <- as.yearmon(paste(df$year, df$month), "%Y %m") 

を次のように私はそれはすなわち、(所望の出力のように見えませんzoo::as.yearmonを使用したいです2011-01)。

しかし、df$Dateは文字列ではなくyearmonオブジェクトとして保存されるため、このアプローチはm0h3nよりも優れています。したがって、あなたは日付のように扱うことができます。たとえば、あなたは...あなたが時間をかけてデータをプロットする苦労を持っているつもりだ文字列などとして

0

df$Dateを保存する場合は、この方法で試すことができますが、以前のOPは良いコード

data <- data.frame(code=c("ABCF","DEFG"), year = c(2011,2012), month = c(08,12)) 



for(i in 1:nrow(data)){ 
if(nchar(data$month[i])==1){ 
    data$Date[i] <- paste(data$year[i],data$month[i],sep="-0") 
}else{ 
    data$Date[i] <- paste(data$year[i],data$month[i],sep="-") 
    } 
} 

data 
    code year month Date 
1 ABCF 2011  8 2011-08 
2 DEFG 2012 12 2012-12 
を持っています
2

通常、日付には1日が含まれ、それ以外の場合は実際に日付ではありません。このため、新しい列の文字ベクトルを作成します。唯一の基本Rを使用して、あなたは... month列上のどこに必要なゼロを追加し、一緒に2つの列を入れて

within(df, Date <- sprintf("%d-%02d", year, month)) 
#  code year month Date 
# 1 YYOOGG 2011  8 2011-08 
# 2 YYOOGG 2011  1 2011-01 
# 3 YYOOGG 2011  4 2011-04 
# 4 YYOOGG 2011  3 2011-03 
# 5 YYOOGG 2011 12 2011-12 
# 6 YYOOGG 2011  9 2011-09 

それとも

df$Date <- with(df, sprintf("%d-%02d", year, month)) 
sprintf()を使用することができます
関連する問題