当前位置:  开发笔记 > 编程语言 > 正文

R data.table用于确定某人是新人还是现有人

如何解决《Rdata.table用于确定某人是新人还是现有人》经验,为你挑选了1个好方法。

我有以下data.table

year      Person     Number_of_visits
2012      1          0
2013      1          4
2014      1          0
2015      1          1
2012      2          1
2013      2          5 
...

我想确定每个人,他们的第一次访问是哪一年.所以期望的输出是:

year      Person     Number_of_visits    New?
2012      1          0                   NA
2013      1          4                   Yes
2014      1          0                   No
2015      1          1                   No
2012      2          1                   NA
2013      2          5                   No

我想也许可以在data.table中使用SHIFT函数,但我无法弄清楚如何这样做.一旦一个人访问过,他/她就不再是新人了,即使可能有一年之后没有访问.如果第一次访问发生在2012年,则应该有NA或类似条目.

我用过

test <- DT[ , NEW := c(0, (2:1)[(Number_of_visits== shift(Number_of_visits)) + 1][-1]), by = Person]

但这自然给了我所有的变化,我想只注册从0到0以上的某个值(访问次数)的第一个变化



1> David Arenbu..:

我会将其分解为以下步骤(我确信解决方案可以打高尔夫球到更短的时间)

setorder(dt, Person, year) # Make sure the order is correct
dt[, New := "No"] # Set No as default
dt[dt[, .I[which.max(Number_of_visits > 0)], by = Person]$V1, New := "Yes"] # find first visits
dt[year == 2012, New := NA_character_] # Set NAs to 2012
dt
#    year Person Number_of_visits New
# 1: 2012      1                0  NA
# 2: 2013      1                4 Yes
# 3: 2014      1                0  No
# 4: 2015      1                1  No
# 5: 2012      2                1  NA
# 6: 2013      2                5  No

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有