在 R 中创建新的分组条件变量
Create new, grouped conditional variable in R
我正在尝试创建一个新变量,该变量已分组并具有多个条件。
例如。使用鸢尾花数据集:
我想添加一个新列,按物种分组并包含有关大小的信息。结果预计是一个因子变量,级别为“小”、“中”和“大”。
这是一个例子:
data(iris)
data %>%
dplyr::group_by(Species) %>%
dplyr::mutate(Size =
if_else(Sepal.Length <= 5.1 ~ "small",
Sepal.Length <= 5.8 & > 5.1 ~ "medium",
Sepal.Length > 5.8 ~ "large")
)
没用。显然有
an unmatched closed bracket ")"
现在,我知道其他解决方案,例如使用 Base R 的 ifelse 函数,但我试图找到一种优雅的方式来使用 tidyverse 风格的代码来表达我自己。谁能帮忙?
我会很高兴使用 tidyverse 代码的任何解决方案。不管是什么功能。
您的语法错误很少。尝试:
library(dplyr)
iris %>%
mutate(Size = case_when(Sepal.Length <= 5.1 ~ "small",
Sepal.Length <= 5.8 & Sepal.Length > 5.1 ~ "medium",
Sepal.Length > 5.8 ~ "large"))
我知道这只是一个示例,但如果您想将数据划分到不同范围的桶中,您还可以考虑 ?cut
和 ?findInterval
。
iris$Size <- cut(iris$Sepal.Length, c(-Inf, 5.1, 5.8, Inf),
c('small', 'medium', 'large'))
我正在尝试创建一个新变量,该变量已分组并具有多个条件。 例如。使用鸢尾花数据集:
我想添加一个新列,按物种分组并包含有关大小的信息。结果预计是一个因子变量,级别为“小”、“中”和“大”。
这是一个例子:
data(iris)
data %>%
dplyr::group_by(Species) %>%
dplyr::mutate(Size =
if_else(Sepal.Length <= 5.1 ~ "small",
Sepal.Length <= 5.8 & > 5.1 ~ "medium",
Sepal.Length > 5.8 ~ "large")
)
没用。显然有
an unmatched closed bracket ")"
现在,我知道其他解决方案,例如使用 Base R 的 ifelse 函数,但我试图找到一种优雅的方式来使用 tidyverse 风格的代码来表达我自己。谁能帮忙? 我会很高兴使用 tidyverse 代码的任何解决方案。不管是什么功能。
您的语法错误很少。尝试:
library(dplyr)
iris %>%
mutate(Size = case_when(Sepal.Length <= 5.1 ~ "small",
Sepal.Length <= 5.8 & Sepal.Length > 5.1 ~ "medium",
Sepal.Length > 5.8 ~ "large"))
我知道这只是一个示例,但如果您想将数据划分到不同范围的桶中,您还可以考虑 ?cut
和 ?findInterval
。
iris$Size <- cut(iris$Sepal.Length, c(-Inf, 5.1, 5.8, Inf),
c('small', 'medium', 'large'))