Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在列中使用特定值将组_后面的数据帧缩减为_R_Dplyr - Fatal编程技术网

R 在列中使用特定值将组_后面的数据帧缩减为

R 在列中使用特定值将组_后面的数据帧缩减为,r,dplyr,R,Dplyr,我有以下tidyverse问题,用下面的mpg数据集表示为reprex 对于每个制造商的每个车型,我想知道是否有6缸版本可用。我可以很容易地生成一个列six.cyl.available,它对这个属性进行编码 库(tidyverse) df%变异(six.cyl.available=if_else(cyl==6,“是”、“否”)) 由(v0.2.1)于2018年10月11日创建 现在,我想通过group\u by(制造商、型号)和 到达原始帧的所有列减去“cyl”的数据帧。相反,我需要一列six

我有以下tidyverse问题,用下面的mpg数据集表示为reprex

对于每个制造商的每个车型,我想知道是否有6缸版本可用。我可以很容易地生成一个列
six.cyl.available
,它对这个属性进行编码

库(tidyverse)
df%变异(six.cyl.available=if_else(cyl==6,“是”、“否”))
由(v0.2.1)于2018年10月11日创建

现在,我想通过
group\u by(制造商、型号)
和 到达原始帧的所有列减去“cyl”的数据帧。相反,我需要一列
six.cyl.available
,如果此特定型号可用于6cyl,则该列包含“yes”,如果此型号不可用于6cyl,则包含“no”。像这样:

|制造商|型号|显示|年份|变速器| drv | cty | hwy | fl |等级|六缸可用|
|:------------|:-----------|:----------|---|
|奥迪| a4 | 3.1 | 2008 |汽车| av | f | 18 | 27 | p |紧凑|是|
|奥迪| a4 quattro | 1.8 | 1999 |手动(m5)| 4 | 18 | 26 | p |紧凑|号|

这个问题困扰了我一段时间。我相信有一个简单的解决方案,我非常感谢您的建议。

如果每个组的所有其他列都有相同的值,我们可以给“是”值,如果
cyl
列的任何
有6,那么我们为该组返回“是”,否则给“否”,然后
切片
组中的任何一行(这里我取第一行)并从输出中删除
cyl

library(dplyr)

df %>%
   group_by(manufacturer, model) %>%
   mutate(six.cyl.available = if (any(cyl==6)) "yes" else "no") %>%
   slice(1) %>%
   select(-cyl)

如果每个组的所有其他列都有相同的值,我们可以给出“是”值,如果
cyl
列的
any
有6,那么我们为该组返回“是”,否则给出“否”,然后从组中的任何一行(这里我取第一行)切片
cyl
列,并从输出中删除
cyl

library(dplyr)

df %>%
   group_by(manufacturer, model) %>%
   mutate(six.cyl.available = if (any(cyl==6)) "yes" else "no") %>%
   slice(1) %>%
   select(-cyl)

我的理解是,您将模型视为数据集中所有列的唯一组合,因为您在所需输出中包含的不仅仅是
制造商
模型
列。因此,您希望按除
cyl
之外的所有内容对数据帧进行分组,然后根据每个属性组合的
cyl
是否为6来汇总数据

您可以在(vars(-cyl))
中使用
group\u by___)
以便按照除
cyl
之外的所有列进行分组。调用
summary
后,
cyl
将被删除,因为它不包括在您的分组中。
摘要
中的
ifelse
允许您设置所需的是/否列。我使用的是
summary
而不是
mutate
,因为您要为每组查找一行

库(dplyr)
任何6%
分组单位(变量(-cyl))%>%
总结(six.cyl.available=ifelse(any(cyl==6),“是”、“否”))
打印(任意六个,宽度=Inf)
#>#A tibble:225 x 11
#>#组:制造商、型号、显示、年份、变速箱、drv、cty、hwy、fl[?]
#>制造商型号显示年份变速器drv cty hwy fl
#>                             
#>1奥迪a4 1.8 1999自动(l5)f 18 29 p
#>2奥迪a4 1.8 1999手册(m5)f 21 29 p
#>3奥迪a4 2 2008汽车(av)f 21 30 p
#>4奥迪a4 2 2008手册(m6)f 20 31 p
#>5奥迪a4 2.8 1999自动(l5)f 16 26 p
#>6奥迪a4 2.8 1999手册(m5)f 18 26 p
#>7奥迪a4 3.1 2008自动(av)f 18 27 p
#>8奥迪a4 quattro 1.8 1999自动(l5)4 16 25 p
#>9奥迪a4 quattro 1.8 1999手册(m5)4 18 26 p
#>10奥迪a4 quattro 2 2008汽车(s6)4 19 27 p
#>第六类,气缸可用
#>                   
#>1号紧凑型
#>2号紧凑型
#>3号紧凑型
#>4号紧凑型
#>5是的
#>6是的
#>7是的
#>8号紧凑型
#>9号紧凑型
#>10号紧凑型
#> # ... 还有215行
为了检查这是否有意义,我查看了原始数据帧和汇总数据帧的行数。很少有观测值具有所有相同的属性,因此汇总数据框的行数只比原始数据框少几行

nrow(ggplot2::mpg)
#> [1] 234
nrow(任意六个)
#> [1] 225

由(v0.2.1)创建于2018-10-11我的理解是,您正在考虑将模型作为数据集中所有列的唯一组合,因为您在所需输出中包含的不仅仅是
制造商
模型
列。因此,您希望按除
cyl
之外的所有内容对数据帧进行分组,然后根据每个属性组合的
cyl
是否为6来汇总数据

您可以在(vars(-cyl))
中使用
group\u by___)
以便按照除
cyl
之外的所有列进行分组。调用
summary
后,
cyl
将被删除,因为它不包括在您的分组中。
摘要
中的
ifelse
允许您设置所需的是/否列。我使用的是
summary
而不是
mutate
,因为您要为每组查找一行

库(dplyr)
任何6%
分组单位(变量(-cyl))%>%
总结(six.cyl.available=ifelse(any(cyl==6),“是”、“否”))
打印(任意六个,宽度=Inf)
#>#A tibble:225 x 11
#>#组:制造商、型号、显示、年份、变速箱、drv、cty、hwy、fl[?]
#>制造商型号d