R 计算每个相同ID的行之间的增量
A有一个已排序的数据帧,我想计算每个相同ID的R 计算每个相同ID的行之间的增量,r,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 1
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
你可以
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%
df您能解释一下这个指令吗df$increaseave
通过df$ID
分割数据,并返回长度为nrow(df)
的向量。第一部分,x
是c(10L,20L,30L)
,diff(x)
是c(10L,10L)
和head(x,1)
是c(10L,20L)
。把它们分开会增加你的收入。我添加NA
,因为第一个值没有增加。