2017-09-26 36 views
0

單模我想知道,如果我們可以找到以下數據創下了單模式:查找的數據

Name    Food Decor Service Price 
107 West   16 13  16 26 
2nd Street cafe  14 13  15 21 
44 & Hell's kitchen 22 19  19 42 
55 wall    21 22  21 54 
55 wall street  21 22  21 54 
92 sub    15 15  15 43 
Angelica kitchen 20 14  15 22 
Angelo's   21 11  14 22 
Avenue    18 14  14 36 

我試圖使用which.max功能,但無法獲得所需的輸出。 請你幫忙。

例如 - 模式的食品將是21

感謝

+1

什麼是理想的輸出提供?不清楚你想要計算什麼。 – neilfws

+0

價格的輸出應該是21.這裏給出的數據是更大數據的一部分 – Rikin

+1

我仍然在努力從數據中看到21與'mode'的'mode'或'max'有什麼關係。 – neilfws

回答

1

你可以得到這個無需額外的庫。對於每個變量,可以創建一個表格並應用which.max來查找哪個值最經常出現。如果平局,我拿第一個。

使用數據由@nielfws

as.numeric(sapply(data1[,2:5], function(x) names(which.max(table(x)))[1])) 
[1] 21 13 15 22 

這可能是不錯的標註這些所謂

Modes = as.numeric(sapply(data1[,2:5], 
    function(x) names(which.max(table(x)))[1])) 
names(Modes) = colnames(data1[2:5]) 
Modes 
    Food Decor Service Price 
    21  13  15  22 
1

這是你在重現的格式的數據,省略了重複的行(55華爾街):

data1 <- structure(list(Name = c("107 West", "2nd Street cafe", "44 & Hell's kitchen", 
           "55 wall street", "92 sub", "Angelica kitchen", 
           "Angelos", "Avenue"), 
         Food = c(16L, 14L, 22L, 21L, 15L, 20L, 21L, 18L), 
         Decor = c(13L, 13L, 19L, 22L, 15L, 14L, 11L, 14L), 
         Service = c(16L, 15L, 19L, 21L, 15L, 15L, 14L, 14L), 
         Price = c(26L, 21L, 42L, 54L, 43L, 22L, 22L, 36L)), 
         .Names = c("Name", "Food", "Decor", "Service", "Price"), 
         class = "data.frame", row.names = c(NA, -8L)) 

我們可以請使用tidyr::gather,然後使用dplyr來計算每列中的值,然後篩選最大值。

library(dplyr) 
library(tidyr) 

data1 %>% 
    gather(key, value, -Name) %>% 
    group_by(key) %>% 
    count(value) %>% 
    filter(n == max(n)) %>% 
    ungroup() 

     key value  n 
    <chr> <int> <int> 
1 Decor 13  2 
2 Decor 14  2 
3 Food 21  2 
4 Price 22  2 
5 Service 15  3 

如果你堅持醜陋的基礎R解決方案,這是一個:

apply(data1[, 2:5], 2, function(x) names(table(x))[which(table(x) == max(table(x)))]) 

$Food 
[1] "21" 

$Decor 
[1] "13" "14" 

$Service 
[1] "15" 

$Price 
[1] "22" 
+0

我們可以在沒有使用任何庫包的情況下找到它嗎? – Rikin

+0

你可以。但爲什麼你會變得醜陋,當你可以去優雅:)我會添加一個基地的R解決方案。 – neilfws

+0

這並不意味着您必須儘可能使基本解決方案變得糟糕。 '應用(data,2,...'只是'lapply' – thelatemail