这是你在重现的格式的数据,省略了重复的行(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"
什么是理想的输出提供?不清楚你想要计算什么。 – neilfws
价格的输出应该是21.这里给出的数据是更大数据的一部分 – Rikin
我仍然在努力从数据中看到21与'mode'的'mode'或'max'有什么关系。 – neilfws