r-根据结果提取值



我有一个代表人们特征的数据帧,如职业、性别和远程工作使用:

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

最新更新