2017-09-26 37 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