我有一个如下所示的数据框:
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/