【发布时间】:2015-02-11 07:48:57
【问题描述】:
我一直希望尽量减少在 R 中使用 for 循环。无论如何,是否可以在没有 for 循环的情况下将当前元素与列表中的前一个元素进行比较?这是我正在处理的问题的简化版本。
如果 First_Transaction 列是个人的第一笔交易,我想将其标记为 1。数据已按人员和日期排序。
Name Amount Date First_Transaction
1 Joe 50 01/05/15 0
2 Joe 43 02/05/15 0
3 Joe 40 03/05/15 0
4 Tom 40 01/03/15 0
5 Tom 34 01/29/15 0
6 Tom 22 02/05/15 0
7 Tom 49 02/10/15 0
8 Kim 28 03/10/15 0
9 Kim 19 03/20/15 0
10 Kim 24 04/13/15 0
11 Kim 35 04/20/15 0
使用 for 循环,我将第一行标记为 1,然后使用逻辑检查当前名称是否与以前的名称匹配。如果没有,请标记 First_Transaction 列 1。
test$First_Transaction[1]=1
for(i in 2:length(test$Name)){
if(test$Name[i] != test$Name[i-1]){
test$First_Transaction[i]=1
}
有可以实现这个逻辑的apply族函数吗?我真的很想弄清楚如何在没有循环的情况下做到这一点。谢谢!
【问题讨论】: