這是你在重現的格式的數據,省略了重複的行(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