我想獲得一個表格,其中包含其他因素變量的變量的前10個絕對和相對頻率。 我有一個3列的數據框:1列是一個因子變量,2是其他變量我需要計數,3是邏輯變量作爲約束。 (真正的數據庫擁有超過4mln觀察)R:相對頻率r按係數
dtf<-data.frame(c("a","a","b","c","b"),c("aaa","bbb","aaa","aaa","bbb"),c(TRUE,FALSE,TRUE,TRUE,TRUE))
colnames(dtf)<-c("factor","var","log")
dtf
factor var log
1 a aaa TRUE
2 a bbb FALSE
3 b aaa TRUE
4 c aaa TRUE
5 b bbb TRUE
所以我需要找到的「VAR」頂絕對和相對頻率,其中「登錄」 == TRUE跨越的「因素」,每個因素。
我已經試過這絕對頻率(在實際分貝我提取前10名,在這裏我得到2線):
t1<-tapply(dtf$var[dtf$log==T],dtf$factor[dtf$log==T],function(x)(head(sort(table(x),decreasing=T),n=2L)))
# Returns array of lists: list of factors containing list of top frequencies
t2<-(t1, ldply)
# Split list inside by id and freq
t3<-do.call(rbind, lapply(t2, data.frame))
# Returns dataframe of top "var" values and corresponding freq for each group in "factor"
# Factor variable's labels are saved as row.names in t3
以下功能可以找到相對頻率爲整個數據庫,而不是因素分組:
getrelfreq<-function(x){
v<-table(x)
v_rel<-v/nrow(dtf[dtf$log==T,])
head(sort(v_rel,decreasing=T),n=2L)}
但是我有一個相對頻率的問題,因爲我需要通過的「VAR」行數來劃分的絕對頻率經各種因素的「變種」,不是全部nrow其中「登錄」 = = T。我不知道如何在tapply循環中使用它,以便分母對每個因素都會有所不同。 我也想在1 tapply循環中使用這兩個函數,而不是生成許多表和合並結果。但不知道如何將這兩個功能放在一起。
請幫助:)
非常感謝你的線索! 但我的數據有問題,我的「var」也是因子變量,其中有超過6000個關卡,所以我的mydat將會非常龐大。但我想它會採用相同的系統時間來獲得前10名頻率?我不知道如何得到除你的方法以外的數量,所以沒有選擇:) – Asayat
@Asayat嗯,我想你必須計算所有的頻率(足夠接近),找到前10名。試試看 - 如果它崩潰你的電腦然後我們需要找到另一種方式! :-)你有多少行數據?因素中有多少個不同的變量? 'unqiue(dtf $因子)' –
@Asayat有沒有運氣? –