我有一个代表人们特征的数据帧,如职业、性别和远程工作使用:
data = data.frame (profession = sample (c ("craftsman", "employee", "senior executive"), 10000, replace = TRUE), sex = sample (c ("M", "F"), 10000, replace = TRUE), en_teletjob = sample (c ("Yes", "No"), 10000, replace = TRUE))
我想创建一个新的数据帧,由值的提取产生的";数据";,例如:
- 有20%的男性和80%的女性
- 而且,有60%的工匠、20%的员工和20%的高管
- 并且;是";使用远程工作
是否可以在R上执行此操作?谢谢
您可以尝试的一种方法是将apply()
和prop.table()
与table()
结合起来,以总结所有变量。这里的代码:
#Code
apply(data,2,function(x) prop.table(table(x)))
输出:
$profession
x
craftsman employee senior executive
0.3331 0.3315 0.3354
$sex
x
F M
0.4987 0.5013
$en_teletjob
x
No Yes
0.503 0.497
您可以使用lapply()
对每个变量调用proportions()
。它返回一个list
对象。
lapply(data, function(x) proportions(table(x)))
# $profession
# x
# craftsman employee senior executive
# 0.3336 0.3318 0.3346
#
# $sex
# x
# F M
# 0.5035 0.4965
#
# $en_teletjob
# x
# No Yes
# 0.4978 0.5022
注意:prop.table()
是proportions()
的早期名称,保留用于向后兼容性
tidyverse
的一个选项是使用adorn_percentages
-代码
library(purrr)
library(dplyr)
library(janitor)
map(names(data), ~data %>%
select(.x) %>%
count(!! rlang::sym(.x)) %>%
adorn_percentages(denominator = 'col'))
-输出
#[[1]]
# profession n
# craftsman 0.3302
# employee 0.3320
# senior executive 0.3378
#[[2]]
# sex n
# F 0.5108
# M 0.4892
#[[3]]
# en_teletjob n
# No 0.4981
# Yes 0.5019