我是新用户,我需要帮助 我的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!
提前致谢
答案 0 :(得分: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
答案 1 :(得分: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