R数据框摘要显示因子频率和总百分比

时间:2013-11-18 04:29:12

标签: r

我有一个包含以下数据的R数据框“internet”:

> internet
   Time       Domain    Category File_Type
1   1.9   google.com  News_Media      html
2   2.0   google.com  News_Media       css
3   2.0   google.com  News_Media       jpg
4   2.1   google.com  News_Media       jpg
5   4.0 facebook.com      Social      html
6   4.0 facebook.com      Social       jpg
7   4.1 facebook.com      Social       css
8   5.9    bbc.co.uk  News_Media      html
9   6.0    bbc.co.uk  News_Media       css
10  6.0    bbc.co.uk  News_Media       jpg
11  6.1    bbc.co.uk  News_Media       jpg
12  6.0 facebook.com      Social      html
13  6.0 facebook.com      Social       jpg
14  6.1 facebook.com      Social       css

我想创建这些数据的摘要,如下所示,尽管我很难找到正确的方法来做到这一点。


Domain         Frequency   Total Percentage
bbc.co.uk      4           28.57143
facebook.com   6           42.85714
google.com     4           28.57143

我可以使用以下方式生成域名因子:

domains <- tapply(internet$Domain, internet$Domain, FUN=length)

和totalPercentage使用的因子:

totalPercentage <- (domain/nrow(internet))*100

但我不太确定如何将这些加入到一个摘要中。

提前感谢大家的时间和帮助

3 个答案:

答案 0 :(得分:7)

这个怎么样:

multi.fun <- function(x) {cbind(freq = table(x), percentage = prop.table(table(x))*100)}
multi.fun(proxy$Domain)

答案 1 :(得分:2)

如果您安装了epicalc软件包,则可以使用?codebook进行此操作。考虑一下:

proxy <- read.table(text="Row   Time       Domain    Category File_Type
1   1.9   google.com  News_Media      html
2   2.0   google.com  News_Media       css
3   2.0   google.com  News_Media       jpg
4   2.1   google.com  News_Media       jpg
5   4.0 facebook.com      Social      html
6   4.0 facebook.com      Social       jpg
7   4.1 facebook.com      Social       css
8   5.9    bbc.co.uk  News_Media      html
9   6.0    bbc.co.uk  News_Media       css
10  6.0    bbc.co.uk  News_Media       jpg
11  6.1    bbc.co.uk  News_Media       jpg
12  6.0 facebook.com      Social      html
13  6.0 facebook.com      Social       jpg
14  6.1 facebook.com      Social       css", header=T)

library(epicalc)
codebook(proxy)
... (output skipped)
================== 
Domain    :       
             Frequency Percent
bbc.co.uk            4    28.6
facebook.com         6    42.9
google.com           4    28.6
... (output skipped)

答案 2 :(得分:0)

马丁的答案正是我所寻求的。为了便于阅读,请在下方略微更改格式的百分比。

multi.fun <- function(x) {
 cbind(freq = table(x), 
 percentage = round(prop.table(table(x))*100, 2))
}
multi.fun(proxy$Domain)