这是我数据集中的一个小例子
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