R语言如何按index索引列聚合dataframe计算指定列均值?
问题原因
你查询value列类型时用了typeof(),该函数返回的是对象底层存储类型,因子类(factor)数据的底层存储为整数,因此会返回integer结果,实际上你的value列是因子类型,无法直接计算均值,因此返回NA。
你可以运行下方代码验证类型:
class(test_df$value)
大概率返回结果为factor。
解决步骤
方法1:继续使用base R的aggregate函数
先将value列转换为数值型,注意因子转数值需要先转字符再转数值,否则会直接提取底层的整数索引值:
# 转换value列类型 test_df$value <- as.numeric(as.character(test_df$value)) # 执行聚合计算,增加na.rm=TRUE避免存在缺失值时返回NA test_df_ag <- stats::aggregate(test_df[1:2], by = test_df[3], FUN = mean, na.rm = TRUE)
方法2:使用dplyr包实现(代码可读性更高)
library(dplyr) test_df_ag <- test_df %>% # 转换value列类型 mutate(value = as.numeric(as.character(value))) %>% # 按index分组 group_by(index) %>% # 计算两列的均值 summarise( value = mean(value, na.rm = TRUE), frequency = mean(frequency, na.rm = TRUE) )
如果转换类型后value列出现NA,说明原始数据中存在非数值内容,你可以运行test_df[is.na(as.numeric(as.character(test_df$value))), ]定位异常行,处理后再计算即可。
内容的提问来源于stack exchange,提问作者ExploreR
相关产品推荐
相关产品推荐

