在包alr4中,是一个数据框,“Mitchell”有两列,一列是月号,另一列是该月的温度。月份表示为0,1,2,3 ... 203(表示1月,2月,3月,12月),其中月份12是次年1月。我正在尝试制作一个数据框,它在月份列中有1,1,1,... 2,2,2,......将这几个月组合在一起,温度列是上述进行的重新排序0,12,24,... 1,13,25,......
我决定分别制作两列,然后使用cbind将它们连接在一起:
#Making temperature column
NTemp <- subset(Mitchell$Temp, Mitchell$Month %% 12 == 0)
for(i in 1:11) {
dummy <- subset(Mitchell$Temp, Mitchell$Month %% 12 == i)
NTemp <- cbind(NTemp, dummy)
}
#Making months column (there's one observation every month for 17 years)
NMonth <- rep(1, 17)
for( i in 2:12 ) {
NMonth <- c(NMonth, rep(i, 17))
}
#Put them together
NMitchell <- cbind(NMonth, NTemp)
我的问题是:
有更简单/更好的方法吗?很多时候我最近做了这样的短功能,我发现你可以做一个很好的一行,例如使用sapply。我在这里看不到我如何使用apply函数,但是你能看到什么好看的吗?
感谢。
答案 0 :(得分:1)
我会为NMonth添加一个列(Jan为1,2月为2等),并对(NMonth,Month)进行排序,以便按月对同一月份的观察进行排序。这是你想要的吗?
Mitchell$NMonth <- (Mitchell$Month %% 12)+1
NMitchell <- Mitchell[with(Mitchell,order(NMonth,Month)),]
答案 1 :(得分:0)
您可以使用富有表现力的dplyr
包
data(Mitchell, package = "alr4")
library(dplyr)
Mitchell %>%
mutate(month = Month %% 12 + 1) %>%
select(month, Temp) %>%
arrange(month)