R 添加新行,在变量列中填充连续年份和0
我有一个3列的表year,ID,variable。对于每个ID,我需要添加一个新行,其中包含下一年,在变量列中添加一个0 这是原始表格:R 添加新行,在变量列中填充连续年份和0,r,R,我有一个3列的表year,ID,variable。对于每个ID,我需要添加一个新行,其中包含下一年,在变量列中添加一个0 这是原始表格: ID year var 1 1998 2 1 1999 5 1 2000 6 1 2001 6 1 2002 6 2 1998 12 2 1999 12 3 1998 5 3 1999 5 3 2000 4 。。。这就是我需要的: ID year
ID year var
1 1998 2
1 1999 5
1 2000 6
1 2001 6
1 2002 6
2 1998 12
2 1999 12
3 1998 5
3 1999 5
3 2000 4
。。。这就是我需要的:
ID year var
1 1998 2
1 1999 5
1 2000 6
1 2001 6
1 2002 6
1 2003 0
2 1998 12
2 1999 12
2 2000 0
3 1998 5
3 1999 5
3 2000 4
3 2001 0
任何帮助都将不胜感激
干杯获取数据:
test <- read.table(textConnection("ID year var
1 1998 2
1 1999 5
1 2000 6
1 2001 6
1 2002 6
2 1998 12
2 1999 12
3 1998 5
3 1999 5
3 2000 4"),header=TRUE)
结果是:
ID year var
1.1 1 1998 2
1.2 1 1999 5
1.3 1 2000 6
1.4 1 2001 6
1.5 1 2002 6
1.6 1 2003 0
2.6 2 1998 12
2.7 2 1999 12
2.3 2 2000 0
3.8 3 1998 5
3.9 3 1999 5
3.10 3 2000 4
3.4 3 2001 0
语法效率高于内存效率的data.table解决方案
library(data.table)
# assuming your data is in the data.frame dd
DT <- data.table(dd)
DT[,list(year = c(year,max(year)+1), var = c(var,0)),by = ID]
下面是另一个仅使用基本包的解决方案
DF <- read.table(textConnection("ID year var
1 1998 2
1 1999 5
1 2000 6
1 2001 6
1 2002 6
2 1998 12
2 1999 12
3 1998 5
3 1999 5
3 2000 4"), header=TRUE)
foo <- split(DF, DF["ID"])
addone <- function(x){
last <- tail(x,1)
last$year<-last$year+1
last$var <- 0
rbind(x,last)
}
do.call(rbind, lapply(foo, addone))
DF <- read.table(textConnection("ID year var
1 1998 2
1 1999 5
1 2000 6
1 2001 6
1 2002 6
2 1998 12
2 1999 12
3 1998 5
3 1999 5
3 2000 4"), header=TRUE)
foo <- split(DF, DF["ID"])
addone <- function(x){
last <- tail(x,1)
last$year<-last$year+1
last$var <- 0
rbind(x,last)
}
do.call(rbind, lapply(foo, addone))
ID year var
1.1 1 1998 2
1.2 1 1999 5
1.3 1 2000 6
1.4 1 2001 6
1.5 1 2002 6
1.51 1 2003 0
2.6 2 1998 12
2.7 2 1999 12
2.71 2 2000 0
3.8 3 1998 5
3.9 3 1999 5
3.10 3 2000 4
3.101 3 2001 0