这是我数据集中的一个小例子

Time <- c(0.1, 0.2, 0.3, 0.1, 0.3)
Individual <- c("A", "A", "A", "B", "B")
data <- data.frame(Individual, Time)
data$Individual <- as.character(data$Individual)

  Individual Time
1          A  0.1
2          A  0.2
3          A  0.3
4          B  0.1
5          B  0.3

我希望创建一个名为“Interval”的新列,该列代表每个人每行之间的时间间隔。 “间隔”列的目标输出为“na”,0.1、0.1,“na”,0.2。

我列出了个人名单
ind.id<-unique(data$Individual)
ind.list<-lapply(1:length(ind.id), function(i){subset(data, data$Individual==ind.id[i])})

但是唯一缺少的是该功能,用于从列表中为每个个人计算时间线之间的差异,并将其放回可用的数据框中。有任何想法吗?

非常感谢,非常感谢您的帮助。

最佳答案

使用R基本功能

> transform(data, val=ave(Time, Individual, FUN=function(x) c(NA, diff(x))))
  Individual Time val
1          A  0.1  NA
2          A  0.2 0.1
3          A  0.3 0.1
4          B  0.1  NA
5          B  0.3 0.2

10-08 07:59