我有一个如下所示的数据框:
COLA COLB COLC COLD COLE
Name1 yes A AB uno
Name2 yes B AC dos
Name3 no C AB tres
Name4 no D AC cuatro
如何创建一个比例数据框,显示每个选定列值的百分比以及频率:
ATTRIBUTE Percentages Frequency
*COLB* *Percentage* *Amount*
yes 50% 2
no 50% 2
*COLC* *Percentage *Amount*
A 25% 1
B 25% 1
C 25% 1
D 25% 1
*COLD* *Percentage* *Amount*
AB 50% 2
AC 50% 2
它不需要看起来完全像这样但我需要它在一个数据帧中并且仅包括所提到的选定列。
任何帮助都会很棒,谢谢!
答案 0 :(得分:2)
您可以执行以下操作:
dat <- data.frame(COLA=paste0("name",1:4),
"COLB"=c("yes", "yes", "no", "no"))
require(purrr)
col_to_stat <- function(col){
tmp <- table(col)
data.frame(ATTRIBUTE = names(tmp), Percentages = c(tmp/length(col)), Frequency = c(tmp),
stringsAsFactors = FALSE)
}
map_df(dat, col_to_stat, .id="col")
这给了你:
col ATTRIBUTE Percentages Frequency
1 COLA name1 0.25 1
2 COLA name2 0.25 1
3 COLA name3 0.25 1
4 COLA name4 0.25 1
5 COLB no 0.50 2
6 COLB yes 0.50 2
如果要打印百分比而不是小数,请查看: How to format a number as percentage in R?
P.S。:如果您使用tibble
代替data.frame
,则可以使用以下更短的内容:
tibble(ATTRIBUTE = names(tmp), Percentages = tmp/length(col), Frequency = tmp)