这是一个从airquality表返回多行的函数。行格式是包含最大温度值的日/月。如何在没有while
或任何其他循环的情况下重写函数?
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
>
maxTemp_func <- function(days) {
Myframe <- as.data.frame(airquality)
l <- list()
x <- 1
while (x <= days) {
NewData <- Myframe[Myframe[, "Temp"] == max(Myframe$Temp), ]
mydata <- c("Month->", head( NewData[["Month"]], 1), "Day->", head( NewData[["Day"]], 1), "Temperature->", head(NewData[["Temp"]] , 1))
l[[x]] <- mydata
Myframe <- Myframe[!(Myframe$Temp == head( max(Myframe$Temp), 1)),]
x <- x + 1
}
return(l)
}
答案 0 :(得分:1)
使用dplyr
返回每个月和每天的最高温度值。
library(dplyr)
output <- airquality %>%
group_by(Month, Day) %>%
summarise(max_temp = max(Temp))
编辑:返回整个数据集的x
最高温度。
N = {insert val here}
output <- airquality %>%
group_by(Month, Day) %>%
mutate(max_temp = max(Temp)) %>%
arrange(desc(max_temp)) %>%
ungroup() %>%
slice(1:N)
答案 1 :(得分:0)
如果您正在寻找airquality
中最热的日子,请执行以下操作:
maxTemp_func <- function(days) {
temp_order <- order(-airquality[["Temp"]])
airquality[temp_order[seq_len(days)], c("Month", "Day", "Temp")]
}
你的函数实际上没有这样做,因为它找到所有与最高温度相关的行,保存它们的第一行,然后删除所有行。因此,如果两行是最热的一天,其中一行不会是第二热门。