子集数据框 - 分组和多个值R

Subset a dataframe - grouped and multiple values R

我正在尝试通过一列中的多个值对数据框进行子集化。

输入如下:

输出应该是:

所以我只想要新数据框中的行,其中包含“自动”列中的 0 和 1 - 为每个商店分组。

已经试过了,但没用:

测试 <- 子集(原始数据,Auto == 0 &Auto == 1) 测试 <- 子集(原始数据,最小值(Auto)== 0 & 最大值(Auto)== 1) 测试<- rawdata[ which(rawdata$Auto'==0 & rawdata$Auto== 1), ]

感谢您的帮助。 此致

根据你的问题,你想做什么不是很清楚。 如果我解释正确,你想保留每一行出现 1 和 0 的商店。

要做到这一点,一种可能的解决方案可能是计算每个商店的行数,并检查该值是否与 auto 的总和相同(表示全为 1)或等于 0(表示全为 0) .

如果满足该条件,您希望排除商店的所有行。

查看函数 summarise

这是您要找的吗?

library(magrittr)
library(dplyr)

#Toy data.
df <- data.frame(Shop = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
                 Order = c(1, 2, 3, 1, 2, 3, 1 , 2, 3), 
                 Auto = c(0, 0, 1, 1, 1, 1, 0, 0, 0))

#Solution.
df %>% 
  group_by(Shop) %>%
  filter(n_distinct(Auto) > 1) %>%
  ungroup()

# # A tibble: 3 × 3
#    Shop Order  Auto
#   <dbl> <dbl> <dbl>
# 1     1     1     0
# 2     1     2     0
# 3     1     3     1

这里的关键思想是使用 dplyr::n_distinct() 来计算每个 Shop 组中 Auto 唯一 值的数量,然后仅保留那些具有超过 1 n_distinct 个值的组。

请不要以图片形式添加数据,请以reproducible format

格式提供数据

您可以 select 0 和 1 都存在的 Shop

library(dplyr)

df %>%
  group_by(Shop) %>%
  filter(all(c(0, 1) %in% Auto)) %>%
  ungroup

#   Shop Order  Auto
#  <dbl> <dbl> <dbl>
#1     1     1     0
#2     1     2     0
#3     1     3     1

数据

df <- structure(list(Shop = c(1, 1, 1, 2, 2, 2, 3, 3, 3), Order = c(1, 
2, 3, 1, 2, 3, 1, 2, 3), Auto = c(0, 0, 1, 1, 1, 1, 0, 0, 0)), 
class = "data.frame", row.names = c(NA, -9L))