Case <- c("A", "B", "C", "A", "B", "C", "A", "B", "C")
ObservationNumber <- c(1, 1, 1, 2, 2, 2, 3, 3, 3)
ObservedValue <- c(154, 152, 157, 173, 176, 171, 203, 205, 199)
mydat <- as.data.frame(cbind(Case, ObservationNumber, ObservedValue),stringsAsFactors = F)
mydat$ObservedValue <- as.numeric(mydat$ObservedValue)
result <- data.frame()
for(c in unique(mydat$Case)){
result <- rbind(result, data.frame(Case=c,Diff=
mydat$ObservedValue[mydat$Case==c & mydat$ObservationNumber == min(mydat$ObservationNumber)] -
mydat$ObservedValue[mydat$Case==c & mydat$ObservationNumber == max(mydat$ObservationNumber)]
))
}
result
Case Diff
1 A -49
2 B -53
3 C -42
我还用更大的数据集做了一个例子,以确保它仍然很快,它是:
Case <- c(rep("A",50), rep("B",50),rep("C",50))
ObservationNumber <- rep(seq(1,50),3)
ObservedValue <- runif(150)
mydat <- as.data.frame(cbind(Case, ObservationNumber, ObservedValue),stringsAsFactors = F)
mydat$ObservedValue <- as.numeric(mydat$ObservedValue)
result <- data.frame()
for(c in unique(mydat$Case)){
result <- rbind(result, data.frame(Case=c,Diff=
mydat$ObservedValue[mydat$Case==c & mydat$ObservationNumber == min(mydat$ObservationNumber)] -
mydat$ObservedValue[mydat$Case==c & mydat$ObservationNumber == max(mydat$ObservationNumber)]
))
}
...为了 100% 确定,我再次将其扩大到 4 个案例,每个案例有 500 个观察值(2000 行),但仍然在不到 1 秒的时间内完成:
Case <- c(rep("A",500), rep("B",500),rep("C",500), rep("D",500))
ObservationNumber <- rep(seq(1,500),4)
ObservedValue <- runif(2000)
mydat <- as.data.frame(cbind(Case, ObservationNumber, ObservedValue),stringsAsFactors = F)
mydat$ObservedValue <- as.numeric(mydat$ObservedValue)
result <- data.frame()
for(c in unique(mydat$Case)){
result <- rbind(result, data.frame(Case=c,Diff=
mydat$ObservedValue[mydat$Case==c & mydat$ObservationNumber == min(mydat$ObservationNumber)] -
mydat$ObservedValue[mydat$Case==c & mydat$ObservationNumber == max(mydat$ObservationNumber)]
))
}