gpt4 book ai didi

r - 在数据帧: index in group (not unique between groups)中创建一个新列

转载 作者:行者123 更新时间:2023-12-02 16:54:01 25 4
gpt4 key购买 nike

我有一个包含两列的数据框:第一列包含每个人所属的组,第二列包含个人的 ID。见下文:

df <- data.frame( group=c('G1','G1','G1','G1','G2','G2','G2','G2'), 
indiv=c('indiv1','indiv1','indiv2','indiv2','indiv3',
'indiv3','indiv4','indiv4'))

group indiv
1 G1 indiv1
2 G1 indiv1
3 G1 indiv2
4 G1 indiv2
5 G2 indiv3
6 G2 indiv3
7 G2 indiv4
8 G2 indiv4

我想在我的数据框中创建一个新列(保留长格式),其中包含组中每个人的索引,即:

   group   indiv  Ineed
1 G1 indiv1 1
2 G1 indiv1 1
3 G1 indiv2 2
4 G1 indiv2 2
5 G2 indiv3 1
6 G2 indiv3 1
7 G2 indiv4 2
8 G2 indiv4 2

我尝试过使用 data.table .N 或 .GRP 方法,但没有成功(顺便说一句,在 data.table 上做得很好!)。

非常感谢任何帮助!

最佳答案

您可以在此处使用新的 rleid 函数(从开发版本 v >= 1.9.5 开始)

setDT(df)[, Ineed := rleid(indiv), group][]
# group indiv Ineed
# 1: G1 indiv1 1
# 2: G1 indiv1 1
# 3: G1 indiv2 2
# 4: G1 indiv2 2
# 5: G2 indiv3 1
# 6: G2 indiv3 1
# 7: G2 indiv4 2
# 8: G2 indiv4 2

或者您可以转换为因子(以便创建唯一的组),然后将它们转换回数字(如果您使用 CRAN 稳定版本 v <= 1.9.4)

setDT(df)[, Ineed := as.numeric(factor(indiv)), group][]
# group indiv Ineed
# 1: G1 indiv1 1
# 2: G1 indiv1 1
# 3: G1 indiv2 2
# 4: G1 indiv2 2
# 5: G2 indiv3 1
# 6: G2 indiv3 1
# 7: G2 indiv4 2
# 8: G2 indiv4 2

关于r - 在数据帧: index in group (not unique between groups)中创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27959280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com