按Class分组计算Apple的均值(字符变量)问题求助
按Class分组计算Apple的均值
你需要先把字符型的Fruit变量转换成数值型的指示变量(标记是否为Apple),再按Class分组计算均值——这个均值本质就是每组中Apple的占比。下面提供两种常用实现方法:
方法一:使用dplyr包(tidyverse风格)
先加载dplyr,然后通过mutate生成指示变量,再分组汇总:
library(dplyr) df %>% mutate(is_apple = ifelse(Fruit == "Apple", 1, 0)) %>% group_by(Class) %>% summarise(apple_proportion = mean(is_apple))
运行后会得到:
# A tibble: 2 × 2 Class apple_proportion <int> <dbl> 1 0 0.667 2 1 0.4
方法二:基础R实现(无需额外包)
可以直接用aggregate函数,不用提前创建新列:
aggregate(Fruit ~ Class, data = df, FUN = function(x) mean(x == "Apple"))
或者分步创建指示变量再计算:
# 生成是否为Apple的数值列 df$is_apple <- as.integer(df$Fruit == "Apple") # 分组计算均值 aggregate(is_apple ~ Class, data = df, FUN = mean)
逻辑说明
字符型变量本身无法计算均值,我们通过x == "Apple"生成布尔值(TRUE/FALSE),R会自动把TRUE识别为1、FALSE识别为0,所以计算均值就等价于求每组中Apple的占比,这就是你要的"均值"结果。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

