【发布时间】:2017-02-27 16:02:35
【问题描述】:
问题
在给定列中的分类值的情况下,如何在 R 的数据框中创建索引列?
换句话说,假设我们有一个如下的数据框:
id cat
1 A
2 A
3 A
4 B
5 B
6 C
7 C
8 C
9 C
10 C
我们如何创建一个名为 rank 的列来执行以下操作:
id cat rank
1 A 1
2 A 2
3 A 3
4 B 1
5 B 2
6 C 1
7 C 2
8 C 3
9 C 4
10 C 5
尝试
假设数据帧名为df。我尝试了以下方法:
- 聚合(df, by = c('A','B','C'), 长度)
- 开始编写自定义函数以使用 lapply,但遇到了太多边界情况。
这给了我不匹配的长度错误。显然,这里的想法是获取每个组的计数,然后编写一个函数,该函数可以使用 lapply 获取行值并继续计数,直到达到长度为止。
附加说明
我正在考虑放弃上述想法,将数据帧按 cat 值拆分为单独的较小数据帧。然后,我将为每个索引的数据框创建一个排名变量。那么挑战就变成了,将所有数据帧值组合回一个具有新排名列的数据帧的好方法是什么?
不过,这些都不适合我。坦率地说,我的直觉告诉我我做错了。我做这太难了吗?是否有一个包或 R 技巧可以轻松做到这一点?如果这看起来很愚蠢,我深表歉意,但如果不寻求比我更熟练的 R 程序员的建议,我就不能有意识地继续前进。
【问题讨论】:
-
这个?
ave(1:nrow(d), d$cat, FUN = seq_along) -
如果您指的是
id列的实际分组排名,df$rank <- ave(df$id, df$cat, FUN = rank) -
@OliverFrost 恕我直言,虽然我承认你非常相似,但我正在尝试基于列值的索引排名,并且用例与我的不同。谢谢你的链接。
-
我为所有评论的人投了赞成票。一旦我能够测试,我会标记答案。谢谢大家的帮助。我对这些亲切的回应感到不知所措和谦卑。