【问题标题】:Subtracting numbers within a data.frame based on a column - R根据列减去data.frame中的数字 - R
【发布时间】:2017-03-21 03:08:26
【问题描述】:

我是新手 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 组之间的差异。

我觉得我做得很机械。

感谢您的宝贵时间

【问题讨论】:

  • 每个组的元素数量是否相同
  • 是的,每个组的元素数量都是一样的

标签: r dataframe grouping subtraction


【解决方案1】:

在这里,OP 提到 'group 的元素数量相同,因此,一种选择是删除最后 4 个元素 (head(df2, -4)[-3]) 和前 4 个元素 (tail(df2, -4)[-3]),这样我们就可以得到差异组 1-2、2-3 等之间的列“a”、“b”,因为“组”是按顺序排列的。出于分类目的,cbind 带有由pasteing 'group' 的unique 元素创建的'group' 向量(通过删除第一个和最后一个元素)

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

【讨论】:

  • 我没有投反对票 - 它现在应该为零并被接受。不知道为什么它被否决了
【解决方案2】:

这看起来像面板数据。你可以试试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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多