【发布时间】:2019-02-14 10:55:05
【问题描述】:
我有一个名称重复的数据集。如果名称重复,我想创建一个值为 1 (TRUE) 或 0 (FALSE) 的新列。
这是我使用的代码:
library(dplyr)
dat %>% mutate(Duplicated = ifelse(distinct(`First name` == T, 0, 1)))
Error in mutate_impl(.data, dots) : Evaluation error: no applicable method for 'distinct_' applied to an object of class "logical".
或
dat %>% mutate(Duplicated = ifelse(distinct(`First name`), 0, 1))
Error in mutate_impl(.data, dots) : Evaluation error: no applicable method for 'distinct_' applied to an object of class "logical".
但是,我收到了您在上面看到的错误。
另一个想法是使用 group_by 然后计算计数。喜欢:
dat %>%
group_by(`Last name`) %>%
summarise(N = n()) %>%
ungroup() %>%
mutate(Dpulicated = ifelse(N > 1, 1,0)
但是,我不能在 group_by 之后返回原始数据帧
【问题讨论】:
-
如果我理解您的问题,您正在寻找
duplicated而不是dinstinct。 -
是的,如果一个名字出现多次,它应该是值 1,否则应该是值 0。
-
@patL 指出函数
duplicated()存在并且是矢量化的。但是,对于重复值的第一个非重复条目,它将返回 FALSE。您可以通过as.numeric(duplicated(x) | duplicated(x, fromLast =T))获得您想要的结果