每个相同ID的行之间的计算增加

时间:2016-04-22 10:01:54

标签: r

A有一个已排序的数据框,我想为每个相同的ID计算x2的增加。 输入已经以某种方式排序:

ID    x2   x3  x4 
1    10   11   2  
2   100   12   4   
1    20   13  10 
7    24    3   1 
1    30   14   0   
3     6   15   1   
2    90   15   1 

我想得到:

ID    x2   increase x3  x4 
1    10            11   2  
2   100            12   4   
1    20      +100% 13  10 
7    24             3   1 
1    30       +50% 14   0   
3     6            15   1   
2    90       -10% 15   1  

1 个答案:

答案 0 :(得分:2)

你可以做到

df <- read.table(header=T, text="
ID    x2   x3  x4 
1    10   11   2  
2   100   12   4   
1    20   13  10 
7    24    3   1 
1    30   14   0   
3     6   15   1   
2    90   15   1")
df$increase <- ave(df$x2, df$ID, FUN = function(x) c(NA, diff(x)/head(x, -1))*100)
df$increase <- ifelse(is.na(df$increase), "", sprintf("%+.0f%%", df$increase))
df
#   ID  x2 x3 x4 increase
# 1  1  10 11  2         
# 2  2 100 12  4         
# 3  1  20 13 10    +100%
# 4  7  24  3  1         
# 5  1  30 14  0     +50%
# 6  3   6 15  1         
# 7  2  90 15  1     -10%