我有这个数据帧(全部),我试图找到每个ID中季节的最高频率。
ID hot index season
41400 10 2 DJF
41400 12 2 DJF
41400 75 4 JJA
41401 89 5 SON
41401 25 3 SON
41401 100 6 SON
20445 67 4 MAM
20445 89 6 MAM
20445 4 1 DJF
20443 67 5 SON
20443 120.2 7 SON
20443 140.5 8 SON
20423 170.5 10 DJF
20423 78.1 5 MAM
预期输出
ID hot index season
41400 10 2 DJF
41400 12 2 DJF
41400 75 4 DJF
41401 89 5 SON
41401 25 3 SON
41401 100 6 SON
20445 67 4 MAM
20445 89 6 MAM
20445 4 1 MAM
20443 67 5 SON
20443 120.2 7 SON
20443 140.5 8 SON
20423 170.5 10 DJF
20423 78.1 5 DJF
从这个问题可以看出,我之前使用
计算了相同数据的均值How can I find mean values in a column based on a different column?
meaned<-with(all, ave(index, ID, FUN=mean))
cbind(all, meaned)
我这样做,但我认为我走的路是错误的
seasonfreq1<-count(all,c(ID,"season"))
seasonfreq2<-with(ID, ave(freq, ID, FUN=max))
但我不确定如何找到频率(或者是否有其他方法)。也许lapply?谢谢!
答案 0 :(得分:3)
我会选择data.table
(假设您的数据名为df
)
library(data.table)
setDT(df)[, freq := .N, by = list(ID, season)]
df[, season := season[which.max(freq)], by = ID][, freq := NULL] # You can leave the `freq` column if you want to see the frequencies
# ID hot index season
# 1: 41400 10.0 2 DJF
# 2: 41400 12.0 2 DJF
# 3: 41400 75.0 4 DJF
# 4: 41401 89.0 5 SON
# 5: 41401 25.0 3 SON
# 6: 41401 100.0 6 SON
# 7: 20445 67.0 4 MAM
# 8: 20445 89.0 6 MAM
# 9: 20445 4.0 1 MAM
#10: 20443 67.0 5 SON
#11: 20443 120.2 7 SON
#12: 20443 140.5 8 SON
#13: 20423 170.5 10 DJF
#14: 20423 78.1 5 DJF
答案 1 :(得分:0)
使用ave
,可能是:
with(all,ave(season,ID,FUN=function(x) names(sort(table(x),decreasing=TRUE)[1])))
# [1] DJF DJF DJF SON SON SON MAM MAM MAM SON SON SON DJF DJF
#Levels: DJF JJA MAM SON