我一直在寻找一种使用R来完成任务的优化方法 任务:找到分配1和0的方式对应于列条目,如果条目重复,则在第一次出现值时分配1,并且休息时间分配0。
Example
ID assigned value
2012 1
2012 0
2012 0
2014 1
2016 1
2015 1
这里id是一个包含id的向量,赋值向量将相应地保存值。 我的解决方案:
for(num in 1:(nrow(Final_file)-1))
{
if((Final_file[num,'ID']) == (Final_file[(num+1),'ID']))
{
assign_value[num] <- c('0')
}
else
{ assign_value[num] <- c('1')
}
}
这里Final_file根据ID进行排序,我的解决方案正在运行,但是在包含21K行的文件上执行此逻辑大约需要40分钟。我想要一个代码,花费更少的时间来完成同样的任务。
答案 0 :(得分:0)
请参阅?duplicated
#set up data (you should have done this part for us)
ID <- c(2012L, 2012L, 2012L, 2014L, 2016L, 2015L)
# one way of getting what you want:
1-duplicated(ID)
我只是在便宜的小笔记本电脑上做到这一点。它在一秒钟内完成了210万个ID的向量(虽然ID都在内存中的向量中)
data.frame(ID=ID,assigned.value=1-duplicated(ID))
ID assigned.value
1 2012 1
2 2012 0
3 2012 0
4 2014 1
5 2016 1
6 2015 1