3

我是新用户,我需要 lil 帮助我的 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 回答