如何在 R 的数据框中将第一个唯一记录标记标记为 1,其余类似的记录标记为 0

问题描述

我需要有关 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,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

有人有什么想法吗?

解决方法

使用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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...