2017-10-21 101 views
0

所以這給出了我所需要的整個列表:獲取最大頻率只爲每一個因素

max <- function(x) { 
    n <- data.frame(x) 
    factored <- n[sapply(n, is.factor)] 
    dt_res = data.frame() 

    for (i in 1:ncol(factored)) { 

     dt_temp = data.frame(t(table(factored[, i]))) 
     dt_temp$Var1 = names(factored)[i] 
     dt_res = rbind(dt_res, dt_temp) 

    } 

    names(dt_res) = c("Factors", "Categories", "Frequency") 

    return(dt_res) 
} 

如何獲得每個因素的最高頻率是多少?隨着鑽石鑲嵌,我得到

Factors Categories Frequency 
cut  Fair  1610 
cut  Good  4906 
cut Very Good 12082 
cut  Premium 13791 
cut  Ideal  21551 
color  D   6775 
color  E   9797 
color  F   9542 
color  G  11292 
color  H  8304 
color  I  5422 
color  J  2808 

和類別爲清楚,但我想它返回此:

Factors Categories Frequency 
cut  Ideal  21551 
color  G  11292 
clarity SI1  13065 

感謝

回答

1

你需要做出改變你的功能,如果你想使用它。 (畢竟,這是你的解決

max <- function(x){ 

    [... your code ...] 
    [... then, between 'names' and 'return' ...] 

    names(dt_res) = c("Factors", "Categories", "Frequency") 
    dt_res <- lapply(split(dt_res, dt_res$Factors), function(x) x[which.max(x$Frequency), ]) 
    dt_res <- do.call(rbind, dt_res) 
    row.names(dt_res) <- NULL 
    return(dt_res) 
} 

max(diamonds) 
# Factors Categories Frequency 
#1 clarity  SI1  13065 
#2 color   G  11292 
#3  cut  Ideal  21551 
1

使用的dplyrtidyr動詞組合

數據

data <- diamonds 

解決方案

library(dplyr) 
library(tidyr) 
select(data, cut, color, clarity) %>% # dplyr - select relevant columns 
    gather(key, value) %>%    # tidyr - gather into long format 
    group_by(key) %>%      # dplyr - group by column name 
    count(value) %>%      # dplyr - table-like function 
    top_n(1)        # dplyr - filter for top row by group 

輸出

# A tibble: 3 x 3 
# Groups: key [3] 
     # key value  n 
    # <chr> <chr> <int> 
# 1 clarity SI1 13065 
# 2 color  G 11292 
# 3  cut Ideal 21551 

編輯選擇其他列

要選擇其他列,改變這一行select(data, cut, color, clarity)。例如,select(data, depth, table, price)

要使用的所有列在diamonds,更換select(data, cut, color, clarity) %>%data %>%

+0

我打算在我的函數中使用它,所以它不會爲不被切斷等欄目,色彩和清晰度工作。我試過dt_temp = data.frame(max(t(table(factorored [,i]))))只是爲了獲得因素和頻率,而不是類別。 –

+0

我會盡可能避免循環。如果您願意,您可以選擇其他列。看到我編輯的答案。 – CPak