【问题标题】:Extract values according to the result根据结果​​提取值
【发布时间】:2020-09-13 12:54:47
【问题描述】:

我有一个代表人们特征的数据框,例如职业、性别和远程办公用途:

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% 的高级管理人员
  • 而且,有 50% 的人表示同意使用远程办公。

是否可以在 R 上执行此操作? 谢谢

【问题讨论】:

  • 您好,如果有任何答案解决了您的问题,请单击旁边的复选标记将您喜欢的答案标记为已接受。谢谢!
  • 如果其中任何一个解决您的问题令您满意,请考虑接受答案。这不是必需的,但它有助于向其他人指明行之有效的方法。您似乎没有接受任何问题的答案。

标签: r dataframe extract


【解决方案1】:

您可以尝试的一种方法是接下来将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 

【讨论】:

    【解决方案2】:

    您可以使用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() 的早期名称,为向后兼容而保留。

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

      • 非常感谢您的回答,完全符合我的需要。但是,我无法查看在哪里输入我的百分比条件(20% 男性、80% 女性等)。我应该在哪里输入这些参数?谢谢
      • @Préliator 您不需要输入任何百分比条件。它根据count step的频率计数计算
      • 对不起,我不明白。据我了解,您给我的算法允许计算每列的模态比例。这很有趣,但这些百分比不适合我。如何提取与我上面给出的参数相匹配的数据框(一个包含 20% 女性和 80% 男性、60% 工匠、20% 员工和 20% 高管的数据框,以及 50% 的“是”使用远程办公?
      猜你喜欢
      • 2013-12-24
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2020-09-07
      相关资源
      最近更新 更多