r - 通过变量的唯一组合添加变量以对数据进行分组

标签 r tidyr data-manipulation dplyr

我有一个如下所示的数据框:

df <- data.frame(cbind((c(2018,2018,2018,2018,2018,2017,2017,2016)), 
        (c('Ohio','Ohio','Arizona','Arizona','Nebraska','Nebraska','New Mexico','Idaho')), 
        (c('A','B','C','D','E','F','G','H')), (c(1,2,3,4,5,6,7,8))))
colnames(df) <- c('Date', 'Location', 'Var1', 'Var2')


      Date   Location     Var1 Var2
      2018   Ohio         A    1 
      2018   Ohio         B    2 
      2018   Arizona      C    3 
      2018   Arizona      D    4 
      2018   Nebraska     E    5 
      2017   Nebraska     F    6 
      2017   New Mexico   G    7 
      2016   Idaho        H    8 

我正在尝试引入一个新变量“组合”,它将代表“日期”和“位置”变量的每个唯一组合,以便共享相同日期和位置的任何观察行都将具有相同的“组合'值。我希望它看起来像这样:

      Date   Location     Var1 Var2  Combo
      2018   Ohio         A    1     1
      2018   Ohio         B    2     1
      2018   Arizona      C    3     2
      2018   Arizona      D    4     2
      2018   Nebraska     E    5     3
      2017   Nebraska     F    6     4
      2017   New Mexico   G    7     5
      2016   Idaho        H    8     6

这样每个组合值都由具有相同日期和位置组合的所有行共享,而不管该行中的其他变量如何。

我尝试结合使用 mutate()distinct() 但没有成功。我希望有一个类似于以下内容的简单解决方案:

有人对此有什么想法吗?我尝试在 distinct()unique() 的文档中查找想法,但没有成功。

非常感谢任何帮助!!

最佳答案

我们可以在按“日期”、“位置”分组后使用 data.table 中的 .GRP

library(data.table)
setDT(df)[, Combo := .GRP, .(Date, Location)]
df
#   Date   Location Var1 Var2 Combo
#1: 2018       Ohio    A    1     1
#2: 2018       Ohio    B    2     1
#3: 2018    Arizona    C    3     2
#4: 2018    Arizona    D    4     2
#5: 2018   Nebraska    E    5     3
#6: 2017   Nebraska    F    6     4
#7: 2017 New Mexico    G    7     5
#8: 2016      Idaho    H    8     6

或者使用rleid

setDT(df)[, Combo := rleid(Date, Location)]

关于r - 通过变量的唯一组合添加变量以对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54771418/

相关文章:

javascript - 在 JavaScript 中给定路径和元素数组构建自定义对象

python - R 无法读取以 Feather 格式保存的 Python Pandas 数据帧

r - R 中的修改时复制行为

r - 当 R 数据框中的列等于 1 时如何获取行索引?

c++ - 由于 cpp11 编译错误,R tidyr 包安装失败(扩展模式 x 不包含参数包)

r - 如何将数据从长格式 reshape 为宽格式以实现此输出?

python - 如何要求生成的数据透视表包含所有列组合的可能性?

r - 使用 lpSolve 在 R 中进行线性规划消除约束

r - 如何清理调查数据?

r - 如何根据满足的条件和时间顺序对 r 中的数据进行排序?