你可能只需要把你的数据整理成一个列表,然后像这样做
set.seed(1234L) # For reproducibility
MyData<-data.frame("date"=c(2006,2006,2006,2010,2010,2010,2014,2014,2014),
"party"=c("A","B","C","A","B","C","A","B","C"),
"value_1"=c(sample(1:100,9,rep=T)),
"value_2"=c(sample(1:100,9,rep=T)),
"value_k"=c(sample(1:100,9,rep=T)))
MyData
date party value_1 value_2 value_k
1 2006 A 12 52 19
2 2006 B 63 70 24
3 2006 C 61 55 32
4 2010 A 63 29 31
5 2010 B 87 93 16
6 2010 C 65 30 4
7 2014 A 1 84 22
8 2014 B 24 29 82
9 2014 C 67 27 53
temp <- split(MyData, MyData$party) #converting into a list with respect to variable party
temp
$A
date party value_1 value_2 value_k
1 2006 A 12 52 19
4 2010 A 63 29 31
7 2014 A 1 84 22
$B
date party value_1 value_2 value_k
2 2006 B 63 70 24
5 2010 B 87 93 16
8 2014 B 24 29 82
$C
date party value_1 value_2 value_k
3 2006 C 61 55 32
6 2010 C 65 30 4
9 2014 C 67 27 53
foo <- function(x) {apply(x[,3:5], MARGIN = 2,FUN = diff)} # function to compute the 1 lag difference in columns 3 4 and 5 of a data.frame x
res <- lapply(temp, foo) # applying foo to each element of temp
res
$A
value_1 value_2 value_k
4 51 -23 12
7 -62 55 -9
$B
value_1 value_2 value_k
5 24 23 -8
8 -63 -64 66
$C
value_1 value_2 value_k
6 4 -25 -28
9 2 -3 49