首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将janitor::tabyl应用于数据表的多个列?

如何将janitor::tabyl应用于数据表的多个列?
EN

Stack Overflow用户
提问于 2021-01-27 00:02:19
回答 3查看 267关注 0票数 1

我有一个数据框架:

代码语言:javascript
复制
ID   value    value_type
A    256       new
B    543       new
A    544       old

我想将janitor::tabyl应用于列ID和value_type,以获取:

代码语言:javascript
复制
ID
     n    percent
A    2     0.66
B    1     0.33


value_type

       n    percent
new    2     0.66
old    1     0.33

我怎么能这么做呢?当我这样做的时候:

代码语言:javascript
复制
janitor::tabyl(dt[, c(ID, value_type)])

它不会按列分隔这些统计表

EN

回答 3

Stack Overflow用户

发布于 2021-01-27 00:12:02

代码语言:javascript
复制
library(purrr)
library(dplyr)

df %>% map(., ~tabyl(.))

您可以选择所需的列:

代码语言:javascript
复制
df %>% 
  select(ID, value_type) %>% 
  map(., ~tabyl(.))

这为我们提供了:

代码语言:javascript
复制
$ID
 . n   percent
 A 2 0.6666667
 B 1 0.3333333

$value_type
   . n   percent
 new 2 0.6666667
 old 1 0.3333333
票数 1
EN

Stack Overflow用户

发布于 2021-02-20 12:39:57

您可以很容易地在baseR中完成此操作

代码语言:javascript
复制
apply(mpg[,1:2], 2, tabyl)

$manufacturer
  newX[, i]  n    percent
       audi 18 0.07692308
  chevrolet 19 0.08119658
      dodge 37 0.15811966
       ford 25 0.10683761
      honda  9 0.03846154
    hyundai 14 0.05982906
       jeep  8 0.03418803
 land rover  4 0.01709402
    lincoln  3 0.01282051
    mercury  4 0.01709402
     nissan 13 0.05555556
    pontiac  5 0.02136752
     subaru 14 0.05982906
     toyota 34 0.14529915
 volkswagen 27 0.11538462

$model
              newX[, i]  n     percent
            4runner 4wd  6 0.025641026
                     a4  7 0.029914530
             a4 quattro  8 0.034188034
             a6 quattro  3 0.012820513
                 altima  6 0.025641026
     c1500 suburban 2wd  5 0.021367521
                  camry  7 0.029914530
           camry solara  7 0.029914530
            caravan 2wd 11 0.047008547
                  civic  9 0.038461538
                corolla  5 0.021367521
               corvette  5 0.021367521
      dakota pickup 4wd  9 0.038461538
            durango 4wd  7 0.029914530
         expedition 2wd  3 0.012820513
           explorer 4wd  6 0.025641026
        f150 pickup 4wd  7 0.029914530
           forester awd  6 0.025641026
     grand cherokee 4wd  8 0.034188034
             grand prix  5 0.021367521
                    gti  5 0.021367521
            impreza awd  8 0.034188034
                  jetta  9 0.038461538
        k1500 tahoe 4wd  4 0.017094017
 land cruiser wagon 4wd  2 0.008547009
                 malibu  5 0.021367521
                 maxima  3 0.012820513
        mountaineer 4wd  4 0.017094017
                mustang  9 0.038461538
          navigator 2wd  3 0.012820513
             new beetle  6 0.025641026
                 passat  7 0.029914530
         pathfinder 4wd  4 0.017094017
    ram 1500 pickup 4wd 10 0.042735043
            range rover  4 0.017094017
                 sonata  7 0.029914530
                tiburon  7 0.029914530
      toyota tacoma 4wd  7 0.029914530
票数 1
EN

Stack Overflow用户

发布于 2021-01-27 02:49:05

使用data.table,我们可以在.SDcols中指定感兴趣的列,使用lapply循环遍历这些列,将tabyl包装在list中并返回这些list列(因为tabyl的输出是一个tabyl/data.frame

代码语言:javascript
复制
library(data.table)
out <- setDT(df1)[, lapply(.SD, function(x) list(tabyl(x))), .SDcols = c('ID', 'value_type')]

-output

代码语言:javascript
复制
out$ID[[1]]
# x n   percent
# A 2 0.6666667
# B 1 0.3333333
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65904779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档