3

私は新しいユーザーで、小さな助けが必要です。私の df は次のようになります

         y         v
 1    2000       1
 2    2003       3
 3    2005       3
 4    2006       6
 5    2009       1
 6    2011       1
 7    2013       3

年ベクトルに表示されない年を追加し、適切な v 値を 0 で入れたいと思います。たとえば、2001年、2002年など。

         y         v
 1    2000       1
 2    2001       0
 3    2002       0
 4    2003       3
 5    2004       0
 6    2005       3

私の最初の試みは、ライブラリ chron を使用して別のベクトルを作成することでした

ここに私のコードがあります、

 yy <- seq.dates(from="01/01/2000", to="12/31/2013", by="years")
 yy <- as.POSIXct(yy, f="%Y")
 yy <- format(yy, f ="%Y")
 pp <- rep(0, length=14)
 yp <- data.frame(cbind(yy, pp))

しかし、それらは同じ長さではないため、年が同じ場合、値を DF から yp に置き換えることができませんでした!

前もって感謝します

4

2 に答える 2

5

これに使用できますmerge

DF <- read.table(text="         y         v
 1    2000       1
 2    2003       3
 3    2005       3
 4    2006       6
 5    2009       1
 6    2011       1
 7    2013       3",header=TRUE)

DF <- merge(DF,
            data.frame(y=seq.int(min(DF$y),max(DF$y))),
            by="y",all=TRUE)
DF$v[is.na(DF$v)] <- 0 #assuming you have no other NA values

head(DF)
#      y v
# 1 2000 1
# 2 2001 0
# 3 2002 0
# 4 2003 3
# 5 2004 0
# 6 2005 3
于 2013-06-27T15:32:50.440 に答える
0

それともmatch別の方法かもしれません...

yseq <- min(DF$y):max(DF$y)
df2 <- data.frame( y = yseq , v = numeric( length( yseq ) ) )
df2$v[ match( DF$y , df2$y ) ] <- DF$v

head(df2)
#    y v
#1 2000 1
#2 2001 0
#3 2002 0
#4 2003 3
#5 2004 0
#6 2005 3
于 2013-06-27T15:39:43.157 に答える