如何针对iris不同分组应用不同函数执行mutate生成新列A
解决方案
可以用dplyr包的case_when()函数实现分组条件逻辑,根据物种(Species)的不同应用对应计算规则:
library(dplyr) # 初始化数据集 data <- head(iris) # 生成新列A data <- data %>% mutate( # 将Sepal.Length转为整数(也可直接嵌入后续计算,单独提取更清晰) sepal_int = as.integer(Sepal.Length), A = case_when( # 处理versicolor和virginica分组 Species %in% c("versicolor", "virginica") ~ 1941 - sepal_int, # 处理setosa分组 Species == "setosa" ~ 1940 - (sepal_int - 1) * 10 ) ) # 查看结果 print(data)
逻辑说明
- 针对
versicolor和virginica,1941 - 整数化的Sepal.Length刚好满足"1对应1940、2对应1939"依次减1的规则 - 针对
setosa,1940 - (整数化的Sepal.Length - 1)*10的计算逻辑:整数为1时结果1940,整数为2时结果1930,整数为3时结果1920,完全匹配需求
内容的提问来源于stack exchange,提问作者bic ton
相关产品推荐
相关产品推荐

