根据列减去 data.frame 中的数字 - R
Subtracting numbers within a data.frame based on a column - R
我是 R 程序员新手。我有这个假人 data.frame.
a b group
1 4 1
5 5 1
7 8 1
10 9 1
14 0 2
18 4 2
20 5 2
25 7 2
29 10 3
35 15 3
40 22 3
48 44 3
57 34 4
68 65 4
77 8 4
86 55 4
我想为 a 列和 b 列生成第 1 组和第 2 组、第 2 组和第 3 组、第 3 组和第 4 组之间的差异。
我觉得我做的很机械
感谢您的宝贵时间
在这里,OP 提到 'group' 具有相同数量的元素,因此,一个选择是删除最后 4 个元素 (head(df2, -4)[-3]
) 和前 4 个元素 (tail(df2, -4)[-3]
) 这样我们就可以得到 1-2、2-3 等组之间 'a'、'b' 列的差异,因为 'group' 是有序的。出于分类目的,cbind
和 'group' 向量通过 paste
ing 'group' 的 unique
元素创建(通过删除第一个和最后一个元素)
un1 <- unique(df2$group)
cbind(group = rep(paste(un1[-length(un1)], un1[-1], sep="-"), each = 4),
head(df2,-4)[-3]- tail(df2,-4)[-3])
# group a b
#1 1-2 -13 4
#2 1-2 -13 1
#3 1-2 -13 3
#4 1-2 -15 2
#5 2-3 -15 -10
#6 2-3 -17 -11
#7 2-3 -20 -17
#8 2-3 -23 -37
#9 3-4 -28 -24
#10 3-4 -33 -50
#11 3-4 -37 14
#12 3-4 -38 -11
这看起来像面板数据。你可以试试 plm
包。
mydata$index <- rep(1:4, 3) # or however many unique groups you have
mydata <- pdata.frame(mydata, c('index', 'group'))
diff_a <- diff(mydata$a)
我是 R 程序员新手。我有这个假人 data.frame.
a b group
1 4 1
5 5 1
7 8 1
10 9 1
14 0 2
18 4 2
20 5 2
25 7 2
29 10 3
35 15 3
40 22 3
48 44 3
57 34 4
68 65 4
77 8 4
86 55 4
我想为 a 列和 b 列生成第 1 组和第 2 组、第 2 组和第 3 组、第 3 组和第 4 组之间的差异。
我觉得我做的很机械
感谢您的宝贵时间
在这里,OP 提到 'group' 具有相同数量的元素,因此,一个选择是删除最后 4 个元素 (head(df2, -4)[-3]
) 和前 4 个元素 (tail(df2, -4)[-3]
) 这样我们就可以得到 1-2、2-3 等组之间 'a'、'b' 列的差异,因为 'group' 是有序的。出于分类目的,cbind
和 'group' 向量通过 paste
ing 'group' 的 unique
元素创建(通过删除第一个和最后一个元素)
un1 <- unique(df2$group)
cbind(group = rep(paste(un1[-length(un1)], un1[-1], sep="-"), each = 4),
head(df2,-4)[-3]- tail(df2,-4)[-3])
# group a b
#1 1-2 -13 4
#2 1-2 -13 1
#3 1-2 -13 3
#4 1-2 -15 2
#5 2-3 -15 -10
#6 2-3 -17 -11
#7 2-3 -20 -17
#8 2-3 -23 -37
#9 3-4 -28 -24
#10 3-4 -33 -50
#11 3-4 -37 14
#12 3-4 -38 -11
这看起来像面板数据。你可以试试 plm
包。
mydata$index <- rep(1:4, 3) # or however many unique groups you have
mydata <- pdata.frame(mydata, c('index', 'group'))
diff_a <- diff(mydata$a)