我有一个数据集,有点像这样:

df <- tibble(group = c(1,1,1,2,2,3,3),
       type = c("HOME", "MAIL", "HOME", "HOME", "HOME",
                "MAIL", "MAIL"),
       count = c(3,4,4,3,3,2,2))

在我的dplyr管道中,我想做一个条件筛选器,这样对于每个组,如果有任何type == "HOME",它将从该组中筛选出任何TYPE == "MAIL",如果没有"Home",则保留"Mail".正如我最后总结的那样,我希望它的输出是 组1=7,组2=6,组3=4.

如有任何帮助,我们将不胜感激

推荐答案

我们可以转换成ordered个因子,然后过滤掉第一个level

library(dplyr)
df %>% 
  mutate(type = ordered(type, c("HOME", "MAIL"))) %>% 
  group_by(group) %>% 
  summarise(count = sum(count[type %in% 
         first(levels(droplevels(type)))]))

-输出

# A tibble: 3 × 2
  group count
  <dbl> <dbl>
1     1     7
2     2     6
3     3     4

或者也可以使用min

df %>% 
  group_by(group) %>% 
   summarise(count = sum(count[type ==min(ordered(type, c("HOME", "MAIL")))]))

R相关问答推荐

混淆矩阵,其中每列和等于1

在R中列表的结尾添加数字载体

在数学中正确显示摄氏度、开氏度或华氏度

在R中使用数据集名称

计算时间段的ECDF(R)

找出二叉树中每个 node 在R中的深度?

try 将 colored颜色 编码添加到ggploly的标题中

如何将网站图像添加到带有极坐标的面包裹条形图?

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

按组内中位数分类

R中时间间隔的大向量与参考时间间隔的相交

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

用多边形替换地块点

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

如何移动点以使它们的打印不重叠

如何将EC50值绘制在R中的剂量-react 曲线上?

是否从列中删除★符号?

我已经运行了几个月的代码的`Palette()`中出现了新的gglot错误

如何在R中使用因子行求和?

修复标签重叠和ggploy内的空间