r - 在 group_by 之后使用列中的特定值减少数据帧
问题描述
我有以下 tidyverse 问题,用下面的 mpg 数据集表述为 reprex。
对于每个制造商的每个车型,我想知道是否有6缸版本可用。我可以很容易地生成一个six.cyl.available
对这个属性进行编码的列。
library(tidyverse)
df <- mpg %>% mutate(six.cyl.available = if_else(cyl==6, "yes","no"))
由reprex 包(v0.2.1)于 2018 年 10 月 11 日创建
现在,我想通过减少生成的数据帧group_by(manufacturer, model)
并得到一个数据帧,其中原始帧的所有列都减去“cyl”。相反,我想要一个列six.cyl.available
,如果此特定模型可用于 6 cyl,则包含“yes”,如果没有,则包含“no”。像这样:
|manufacturer |model | displ| year|trans |drv | cty| hwy|fl |class|six.cyl.available |
|:------------|:-----------|:----------|---|
|audi |a4 | 3.1| 2008|auto(av) |f | 18| 27|p |compact |yes|
|audi |a4 quattro| 1.8| 1999|manual(m5) |4 | 18| 26|p |compact |no|
这个问题让我困惑了一段时间。我相信有一个简单的解决方案,我将不胜感激。
解决方案
如果每组的所有其他列都具有相同的值,如果列有 6,我们可以给出“是”值any
,cyl
那么我们为该组返回“是”,否则给出“否”,然后slice
是该组中的任何一行(这里我有取第一行)并cyl
从输出中删除该列。
library(dplyr)
df %>%
group_by(manufacturer, model) %>%
mutate(six.cyl.available = if (any(cyl==6)) "yes" else "no") %>%
slice(1) %>%
select(-cyl)
推荐阅读
- c++ - Windows 上 OpenCV 应用程序的紧凑构建
- javascript - Vuejs 将数组子元素组合为一个数组
- python - 模型测试的时机和决策树分类器的训练
- mysql - 基于两列 SQL 搜索数据
- javascript - 纯 javascript 的手风琴 - 扩展不跟随组
- python - 如何使用 python 获得响应和访问 AWS Api?
- sql-server - 按序列号将数据集显示为逗号分隔值组
- r - 是否不可能在 Ubuntu 18.04.4 LTS 上安装 R 4.0,因为 r-base-core 需要 libc6 版本 >= 2.29?
- google-apps-script - 电子表格 - 组合来自多个表达式的多个真实结果
- scala - 在类路径中出现错误,但添加了 jar