【问题标题】:Mutate using distinct and ifelse dplyr使用 distinct 和 ifelse dplyr 进行变异
【发布时间】: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)) 获得您想要的结果

标签: r dplyr


【解决方案1】:

您可以使用mutate(N = n()) 而不是summarise(N= n())

我会这样做:

library(dplyr)

df = data.frame("last_name" = c("Smith","James","Smith","Smith","Messi"),
                "value" = c(15,26,7,38,90))

df = df %>%
  group_by(last_name) %>%
  mutate(n = n(),
         is_dupe = ifelse(n > 1,TRUE,FALSE))

【讨论】:

  • ifelse(n > 1,TRUE,FALSE) 给出与n > 1 完全相同的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2018-08-24
  • 2018-06-24
  • 2014-04-15
相关资源
最近更新 更多