我希望根据组大小进行条件过滤.

假设我有一个双框,它看起来像:

data1 <- data.frame(
  ID = c(1, 1, 1, 3, 3, 5, 6),
  town = c("Town A", "Town A", "Town B", "Town A", "Town C", "Town B", "Town A"),
  place = c("A", "B", "A", "B", "C", "A", "B"),
  place1 = c("A", "c", "A", "B", "C", "A", "D"),
  test = c("G", "B", "A", "B", "C", "A", "B"),
  test1 = c("G", "B", "A", "B", "d", "A", "B")

我希望每个ID保留一个城镇,基于条件过滤place == place1,如果组大小仍然大于我想要过滤test == test1.

我试过这样的方法:

data1 %>%group_by(ID) %>% 
  filter(if (n() >= 2) place == place1 else test == test1) %>% 
  filter(n() == 1) %>% 
  ungroup()

但如果没有,因为第1组和第3组都不见了.

推荐答案

根据条件排序数据(降序,TRUE在RESET之前),然后每组切片1行:

data1 |>
  arrange(ID, desc(place == place1), desc(test == test1)) |>
  slice(1, .by = ID)
#   ID   town place place1 test test1
# 1  1 Town A     A      A    G     G
# 2  3 Town A     B      B    B     B
# 3  5 Town B     A      A    A     A
# 4  6 Town A     B      D    B     B

请注意,如果有平局(如原始数据中的第1行和第3行),这将probably保留第一个,但我不会指望它.

R相关问答推荐

使用gggplot 2在R中重新调整面板和y轴文本大小

使用对管道内单元格的引用生成新变量

R创建一个数据透视表,计算多个组的百分比

将复杂的组合列表转换为数据框架

手动打印线型gplot

从BRM预测价值

使用整齐的计算(curl -curl )和杂音

正在导出默认的RStudio主题,还是设置括号 colored颜色 ?

R中的类别比较

循环遍历多个变量,并将每个变量插入函数R

多元正态分布的计算

按组跨多列创建伪变量

计算来自单独分组的分幅的值的百分位数

R中的Desolve:返回的导数数错误

把代码写成dplyr中的group_by/摘要更简洁吗?

删除r中每个因素级别的最后2行

使用卡环从R中的列中删除单位(&C)

使用nls()函数的非线性模型的半正态图

如果缺少时间,如何向日期-时间列添加时间

如何在给定的环境中找到函数的函数参数?