「思维发散」R语言分组计算的N种方法

题: 给定一个数据框,根据某个分组对另一个列进行求值。

举例: 按照年份和月份进行分组,对温度进行求均值,其中温度中存在NA

数据库

实现这种操作有很多方法,按照代码长度,列出我想出的解题思路

1. for循环

df$Year_Month <- factor(paste(df$Year, df$Month, sep = "-" ))

temp_date <- c()
temp_mean <- c()

for (i in unique(df$Year_Month)){
  
  tmp_df <- df[df$Year_Month == i,]
  tmp_mean <- mean(tmp_df$Temperature, na.rm = T)
  temp_date <- c(temp_date,i)
  temp_mean <- c(temp_mean, tmp_mean)
  
}

res_tmp <- data.frame(date=temp_date, temp_mean=temp_mean)

2. split-lapply-do.call

df$Year_Month <- factor(paste(df$Year, df$Month, sep = "-" ))

df_list <- split(df, f=df$Year_Month)

temp_mean_list <- lapply(df_list, function(x) mean(x$Temperature, na.rm = T) )
do.call(rbind, temp_mean_list)

3. split-sapply

df$Year_Month <- factor(paste(df$Year, df$Month, sep = "-" ))
df_list <- split(df, f=df$Year_Month)
temp_mean_list <- sapply(df_list, function(x) mean(x$Temperature, na.rm = T) )

4. dplyr

library(dplyr)
df %>% 
  group_by(Year, Month) %>% 
  summarise(temp_mean = mean(Temperature, na.rm = T)) %>% 
  head()

5. SQL

library(sqldf)
sqldf("select avg(Temperature) from df group by Year,Month")

6. aggregate

out <- aggregate(df$Temperature, by=list(df$Year, df$Month), FUN=mean, na.rm=TRUE)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 笔记内容:使用Rstudio的快捷键及tips一些工作中常用、有用的packages及函数各种日常备忘... .....
    GPZ_Lab阅读 10,484评论 0 15
  • 这个教程目的在于介绍apply()家族在R语言的用法,apply()函数算是R语言里面很基础的一个函数,同时还有s...
    面面的徐爷阅读 48,752评论 0 24
  • 刘小泽写于2018.8.27-28我们日常使用R一般不会使用它的编程工作(即写R包的任务),许许多多的的生信函数、...
    刘小泽阅读 28,152评论 1 27
  • 出门在外,总会不知不觉想到家乡,家乡的人,家乡的物。那些熟悉的山山水水,花草虫鸟,总是很清晰的浮现在脑海。 自从走...
    南宫冰雪林阅读 1,864评论 -1 1
  • 在宝宝添加辅食的初期,妈妈要经常给宝宝添加高铁米粉,来强化宝宝体内的铁元素。 但是米粉仅仅是辅食添加初期的重要食物...
    营养师青柠檬阅读 3,966评论 0 0

友情链接更多精彩内容