Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 添加新行,在变量列中填充连续年份和0_R - Fatal编程技术网

R 添加新行,在变量列中填充连续年份和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

我有一个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    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