R 数据帧中的条件列减法或行减法

R 数据帧中的条件列减法或行减法,r,dataframe,R,Dataframe,我需要在R中进行列减法和行减法 id on fail 1 10-10-2014 11-11-2014 1 11-10-2014 12-12-2014 1 12-10-2014 12-01-2015 2 13-10-2014 12-02-2015 2 14-10-2014 15-03-2015 2 15-10-2014 15-04-2015 2 16-10-2014 16-05-2015 3 17-10-20

我需要在R中进行列减法和行减法

id    on    fail  
1   10-10-2014  11-11-2014  
1   11-10-2014  12-12-2014  
1   12-10-2014  12-01-2015  
2   13-10-2014  12-02-2015  
2   14-10-2014  15-03-2015  
2   15-10-2014  15-04-2015  
2   16-10-2014  16-05-2015  
3   17-10-2014  16-06-2015  
3   18-10-2014  17-07-2015  
3   19-10-2014  17-08-2015  
3   20-10-2014  17-09-2015 
例如,在上表中,每当出现新id时,它都应该执行列减法,否则它应该执行行减法。我需要这样的结果:

id      on        fail     res  
1   10-10-2014  11-11-2014  32  
1   11-10-2014  12-12-2014  31  
1   12-10-2014  12-01-2015  31  
2   13-10-2014  12-02-2015  122  
2   14-10-2014  15-03-2015  31  
2   15-10-2014  15-04-2015  31  
2   16-10-2014  16-05-2015  31  
3   17-10-2014  16-06-2015  242  
3   18-10-2014  17-07-2015  31  
3   19-10-2014  17-08-2015  31  
3   20-10-2014  17-09-2015  31 
到目前为止,我正在使用以下代码:

data[,2] <- as.Date(data[,2],format="%d-%m-%Y")  
data[,3] <- as.Date(data[,3],format="%d-%m-%Y")  
x <- as.numeric(diff(data[,3]))

data[2]
DF非常感谢罗兰。。。它是有效的。。。很抱歉,我没有太多的声誉投票给这个答案。即使你还不能投票,你可以通过点击复选标记接受答案。这将为你带来声誉。再次非常感谢罗兰…:)嗨,罗兰,现在我需要减去[2]上的失败[1],[3]上的失败[2]。你能建议怎么做吗
DF <- read.table(text="id    on    fail  
1   10-10-2014  11-11-2014  
1   11-10-2014  12-12-2014  
1   12-10-2014  12-01-2015  
2   13-10-2014  12-02-2015  
2   14-10-2014  15-03-2015  
2   15-10-2014  15-04-2015  
2   16-10-2014  16-05-2015  
3   17-10-2014  16-06-2015  
3   18-10-2014  17-07-2015  
3   19-10-2014  17-08-2015  
3   20-10-2014  17-09-2015 ", header=TRUE)

DF[,2:3] <- lapply(DF[,2:3], as.Date, format="%d-%m-%Y")

DF$res <- c(NA, diff(DF$fail))
DF[c(TRUE ,diff(DF$id)!=0), "res"] <- DF[c(TRUE ,diff(DF$id)!=0), "fail"] - 
                                       DF[c(TRUE ,diff(DF$id)!=0), "on"]
#    id         on       fail res
# 1   1 2014-10-10 2014-11-11  32
# 2   1 2014-10-11 2014-12-12  31
# 3   1 2014-10-12 2015-01-12  31
# 4   2 2014-10-13 2015-02-12 122
# 5   2 2014-10-14 2015-03-15  31
# 6   2 2014-10-15 2015-04-15  31
# 7   2 2014-10-16 2015-05-16  31
# 8   3 2014-10-17 2015-06-16 242
# 9   3 2014-10-18 2015-07-17  31
# 10  3 2014-10-19 2015-08-17  31
# 11  3 2014-10-20 2015-09-17  31