이것이 기본적인 해결책이라고 생각하기 때문에 왜 해결책을 찾을 수 없는지 이해할 수 없습니다. 그렇다면 도움을 청해야합니다. 나는 매월 최고 온도로 한달에 한 번씩 공기 품질 데이터 세트를 재정비하고 싶다. 또한 매월 최대 온도에 해당하는 날짜를 찾고 싶습니다. 이렇게하는 게 가장 지루한 (코드별로) 방법은 무엇입니까?다른 열의 가장 높은 값을 기준으로 값을 선택하십시오.
month day temp
5 7 89
...
이것이 기본적인 해결책이라고 생각하기 때문에 왜 해결책을 찾을 수 없는지 이해할 수 없습니다. 그렇다면 도움을 청해야합니다. 나는 매월 최고 온도로 한달에 한 번씩 공기 품질 데이터 세트를 재정비하고 싶다. 또한 매월 최대 온도에 해당하는 날짜를 찾고 싶습니다. 이렇게하는 게 가장 지루한 (코드별로) 방법은 무엇입니까?다른 열의 가장 높은 값을 기준으로 값을 선택하십시오.
month day temp
5 7 89
...
게으르다가 좋은지 아닌지에 대해 꽤 많은 토론이있었습니다. Anwyay, 이것은 쓰기 및 읽기 짧고 자연 (및 변경하거나 나중에 최적화 할 필요가 없습니다 대용량 데이터에 대한 빠른) :
require(data.table)
DT=as.data.table(airquality)
DT[,.SD[which.max(Temp)],by=Month]
Month Ozone Solar.R Wind Temp Day
[1,] 5 45 252 14.9 81 29
[2,] 6 NA 259 10.9 93 11
[3,] 7 97 267 6.3 92 8
[4,] 8 76 203 9.7 97 28
[5,] 9 73 183 2.8 93 3
.SD
각 그룹에 대한 데이터의 하위 집합입니다, 가장 큰 온도 인 iiuc가있는 행을 원할뿐입니다. 행 번호가 필요하면 추가 할 수 있습니다.
:
DT[,.SD[Temp==max(Temp)],by=Month]
Month Ozone Solar.R Wind Temp Day
[1,] 5 45 252 14.9 81 29
[2,] 6 NA 259 10.9 93 11
[3,] 7 97 267 6.3 92 8
[4,] 7 97 272 5.7 92 9
[5,] 8 76 203 9.7 97 28
[6,] 9 73 183 2.8 93 3
[7,] 9 91 189 4.6 93 4
방법 plyr
을 약 :이 같은 후 오전
require(reshape2)
names(airquality) <- tolower(names(airquality))
mm <- melt(airquality, id.vars = c("month", "day"), meas = c("temp"))
dcast(mm, month + day ~ variable, max)
aggregate(formula = temp ~ month + day, data = airquality, FUN = max)
:
내가 성공하지 않고 다음과 같은 시도?
max.func <- function(df) {
max.temp <- max(df$temp)
return(data.frame(day = df$Day[df$Temp==max.temp],
temp = max.temp))
}
ddply(airquality, .(Month), max.func)
위에서 볼 수 있듯이 최대 온도는 1 일 이상에 걸립니다. 다른 동작을 원할 경우 조정하기가 쉽습니다.
아니면 data.table
패키지를 사용하려는 경우 (속도가 문제이며 데이터 세트가 큰 경우, 또는 예를 들어 당신은 구문을 선호하는 경우) :
library(data.table)
DT <- data.table(airquality)
DT[, list(maxTemp=max(Temp), dayMaxTemp=.SD[max(Temp)==Temp, Day]), by="Month"]
당신이 무엇을 알고 싶은 경우를 .SD
는 다음과 같이 표기합니다. SO
당신이 저를 이길 것 같아요 :) –
시간의 현명한, 예, 2 초 (축하하는 시간 ;-)하지만 당신의'which.max' 트릭은 멋지다 ... 그래서 +1! –
plyr
require(reshape2)
names(airquality) <- tolower(names(airquality))
mm <- melt(airquality, id.vars = c("month", "day"), meas = c("temp"), value.name = 'temp')
library(plyr)
ddply(mm, .(month), subset, subset = temp == max(temp), select = -variable)
또 다른 방법은 더 간단
month day temp
1 5 29 81
2 6 11 93
3 7 8 92
4 7 9 92
5 8 28 97
6 9 3 93
7 9 4 93
또는를 제공합니다
require(reshape2)
require(plyr)
names(airquality) <- tolower(names(airquality))
ddply(airquality, .(month), subset,
subset = temp == max(temp), select = c(month, day, temp))
고마워! 이전에 data.table 패키지를 사용하지 않았으므로 시간이 얼마 남지 않았습니다. "답변 됨"이것은 가장 완벽한 (Chritoph_J보다 약간 짧음) 때문입니다. 당신 모두는 그것을 받아 들였을 것이다. (모두에게 +1). – Mikko
어떤 언어로든 더 간결한 솔루션이 있는지 궁금합니다. 나는 추측하고있다. –