【问题标题】:How can I mark (flag) first unique record as 1 and the rest similar records as 0 in data frame in R如何在 R 的数据框中将第一个唯一记录标记(标记)为 1,其余类似记录为 0
【发布时间】:2021-07-08 06:59:24
【问题描述】:

我需要有关 R 中数据的帮助。如果我至少有一条记录,我将创建新列。 我的数据(df)如下所示:

date adress
28.03 bla
28.03 xyz
17.03 abc
30.03 yxz
24.03 bla 
17.03 abc
23.03 abc
28.03 bla
24.03 bla
24.03 bla

而且我想创建一个带驾驶的新列,如果日期和地址相同,则设置为 1(在第一个发现的记录中)。如果有人在同一个地方去另一个时间(日期),设置 1,但如果有人去同一个地方,日期将再次是相同的设置 0。
像这样的:

date adress drive
28.03 bla 1
28.03 xyz 1
17.03 abc 1
30.03 yxz 1
24.03 bla 1 
17.03 abc 0
23.03 abc 1
28.03 bla 0
24.03 bla 0
24.03 bla 0

我使用 dplyr:

df2 <- df %>%
       group_by(date, adress) %>%
       mutate(drive = ifelse(n()>1, 0, 1))

我得到如下数据,我的第一个发现记录也是 0。

date adress drive
28.03 bla 0
28.03 xyz 1
17.03 abc 0
30.03 yxz 1
24.03 bla 0 
17.03 abc 0
23.03 abc 1
28.03 bla 0
24.03 bla 0
24.03 bla 0

大家有什么想法吗?

【问题讨论】:

    标签: r group-by unique dplyr


    【解决方案1】:

    使用duplicated。如果重复记录,则返回 1,否则返回 0,因此是 ! bang 运算符。 + 在逻辑之前将其转换为数字。

    df %>% mutate(drive = +!duplicated(paste(date, adress)))
    
        date adress drive
    1  28.03    bla     1
    2  28.03    xyz     1
    3  17.03    abc     1
    4  30.03    yxz     1
    5  24.03    bla     1
    6  17.03    abc     0
    7  23.03    abc     1
    8  28.03    bla     0
    9  24.03    bla     0
    10 24.03    bla     0
    
    

    【讨论】:

    • 嗨,好的,我使用此代码。很好,但我又有问题了。如果重复驾驶的摘要等于10,如何再次添加1,然后再给我1。记录1、10和20,然后给我1。2-9之间给0,11-19再次等于0。
    • @Shigerusam,我看不懂,能详细点吗?
    • @Shigerusam,不要在 cmets 中发布您的问题,请将其作为单独的问题连同示例输入和预期输出一起发布,以便更容易理解
    • 好的,我会说的。
    • stackoverflow.com/questions/67566047/…我在这里推送新帖子。
    猜你喜欢
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2012-04-12
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多