表示多个组的多个列

Jen*_*Jen 5 r sapply dplyr dcast

我正在尝试为具有多个组的数据框的多列找到不包括 NA 的方法

airquality <- data.frame(City = c("CityA", "CityA","CityA",
                                  "CityB","CityB","CityB",
                                  "CityC", "CityC"),
                         year = c("1990", "2000", "2010", "1990", 
                                  "2000", "2010", "2000", "2010"),
                         month = c("June", "July", "August",
                                   "June", "July", "August",
                                   "June", "August"),
                         PM10 = c(runif(3), rnorm(5)),
                         PM25 = c(runif(3), rnorm(5)),
                         Ozone = c(runif(3), rnorm(5)),
                         CO2 = c(runif(3), rnorm(5)))
airquality
Run Code Online (Sandbox Code Playgroud)

所以我得到一个带有数字的名称列表,所以我知道要选择哪些列:

nam<-names(airquality)
namelist <- data.frame(matrix(t(nam)));namelist
Run Code Online (Sandbox Code Playgroud)

我想按城市和年份计算 PM25、臭氧和二氧化碳的平均值。这意味着我需要第 1,2,4,6:7 列)

acast(datadf, year ~ city, mean, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

但这并不是我真正想要的,因为它包含了我不需要的东西的平均值,而且它不是数据帧格式。我可以转换它然后删除,但这似乎是一种非常低效的方法。

有没有更好的办法?

akr*_*run 11

按感兴趣的列分组后,我们可以使用dplyrwithsummarise_at来获取相关列mean

\n\n
library(dplyr)\nairquality %>%\n   group_by(City, year) %>% \n   summarise_at(vars("PM25", "Ozone", "CO2"), mean)\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者使用(version - )devel的版本dplyr\xe2\x80\x980.8.99.9000\xe2\x80\x99

\n\n
airquality %>%\n     group_by(City, year) %>%\n     summarise(across(PM25:CO2, mean))\n
Run Code Online (Sandbox Code Playgroud)\n