首页 > 解决方案 > 如何将分配为 0 或 1 的数据分组?

问题描述

我想按名称对数据集进行分组,如果相同的名称在响应列中至少包含一个 0,我想将其分配为 0,否则为 1。请查看数据和输出。

   data = data.frame(stringsAsFactors = FALSE,
                      name = c("Mary", "Frank", "Tom", "Frank", "Mary"),
                      response = c(1, 0, 1, 0, 0))

例如,玛丽的响应值为 0 和 1,因此我将其分配为 0。请参见下面的输出。

Output = data.frame(stringsAsFactors = FALSE,
                  name = c("Mary", "Frank", "Tom"),
                  response = c(0, 0, 1))

标签: rdplyr

解决方案


您可以取变量的最小值response

library(dplyr)
data %>%
  group_by(name) %>%
  summarise(response = min(response))

或者这可能更清楚:

data %>%
  group_by(name) %>%
  summarise(response = if(any(response == 0)) 0 else 1)

在基础 R 中,使用aggregate

aggregate(response~name, data, min)

推荐阅读