@ Henrik的是易用性更好,因爲這會令列字符,不再數字匹配,但你問什麼...
mtcars %>%
group_by (am, gear) %>%
summarise (n=n()) %>%
mutate(rel.freq = paste0(round(100 * n/sum(n), 0), "%"))
## am gear n rel.freq
## 1 0 3 15 79%
## 2 0 4 4 21%
## 3 1 4 8 62%
## 4 1 5 5 38%
編輯因爲Spacedman問它:-)
as.rel_freq <- function(x, rel_freq_col = "rel.freq", ...) {
class(x) <- c("rel_freq", class(x))
attributes(x)[["rel_freq_col"]] <- rel_freq_col
x
}
print.rel_freq <- function(x, ...) {
freq_col <- attributes(x)[["rel_freq_col"]]
x[[freq_col]] <- paste0(round(100 * x[[freq_col]], 0), "%")
class(x) <- class(x)[!class(x)%in% "rel_freq"]
print(x)
}
mtcars %>%
group_by (am, gear) %>%
summarise (n=n()) %>%
mutate(rel.freq = n/sum(n)) %>%
as.rel_freq()
## Source: local data frame [4 x 4]
## Groups: am
##
## am gear n rel.freq
## 1 0 3 15 79%
## 2 0 4 4 21%
## 3 1 4 8 62%
## 4 1 5 5 38%
這些百分比是你想要的實際數量嗎?它們來自哪裏,代數?啊,79%是15 /(15 + 4),21%是4 /(15 + 4),然後對於== == 1 62%是8 /(8 + 5)等等。 – Spacedman
@Spacedman是的,這些是我想要的數字,弗蘭克是正確的,他們通過am變量(79 + 21)和(62 + 38)總和爲100%。 – jenswirf
這真的好像是在尋找一個本地的dplyr實現''prop.table()'/'sweep()'。此外,在其他問題中,有些人[要求爲變量或變量交互包含零計數](http://stackoverflow.com/questions/23778195/using-dplyr-for-frequency-counts-of- – smci