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
答案 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%