Search code examples
rdplyrdata.tabletidyversedcast

How do I repeat the analysis of the frequency/table of categorical variables by group for multiple variables


I created this dataframe Variable_7101 but I would like to repeat this analysis for multiple variables. To be more specific, I have another dataframe (df) with rows containing the other variables that I would like to analyze.

Variable_7101 <- dcast(data=DATA,
                       V507 ~ V7101 + V1,
                       fun.aggregate = length,
                       value.var = "V7101")

I could repeat manually this code many times.

Variable_7102 <- dcast(data=DATA,
                       V507 ~ V7102 + V1,
                       fun.aggregate = length,
                       value.var = "V7101")

Variable_712  <- dcast(data=DATA,
                       V507 ~ V712 + V1,
                       fun.aggregate = length,
                       value.var = "V7101")

Variable_7200 <- dcast(data=DATA,
                       V507 ~ V7200 + V1,
                       fun.aggregate = length,
                       value.var = "V7101")

However, I do not think this is the best form.

tail(DATA, 10)
       CASEID   V1             V3        V5 V501              V507         V508        V509         V7101
212324  32864 2016 (4) FORM 4:(4) 0.9275599 <NA> (1) NORTHEAST:(1) (0) ELSE:(0) (1) MSA:(1) (1) NEVER:(1)
            V7104               V7105               V7112               V7115               V7118
212324 (1) NO:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)
                     V7127               V7097               V7133               V7139               V7142 V8451
212324 (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)  <NA>
       V7426               V7121               V7124 V7164               V7145               V7109
212324  <NA> (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)  <NA> (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)
                     V7152               V7155               V7158               V7161 V7601 V8480
212324 (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)  <NA>  <NA>
                     V7106               V7113               V7116               V7119               V7128
212324 (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)
                     V7098               V7134               V7140               V7143 V8452               V7122
212324 (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)  <NA> (1) 0 OCCASIONS:(1)
                     V7125 V7165               V7146               V7110               V7153               V7156
212324 (1) 0 OCCASIONS:(1)  <NA> (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)
                     V7159               V7162 V7602 V7488 V7489 V7491 V7492 V8481 V7495 V7554 V7561 V7564 V7566
212324 (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7568 V7569 V7567        V7102               V7107               V7114               V7117
212324  <NA>  <NA>  <NA> (1) NONE:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)
                     V7120               V7129               V7099               V7135               V7141
212324 (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)
                     V7144 V8453 V7427               V7123               V7126 V7166               V7147
212324 (1) 0 OCCASIONS:(1)  <NA>  <NA> (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)  <NA> (1) 0 OCCASIONS:(1)
                     V7111               V7154               V7157               V7160               V7163 V7603
212324 (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1) (1) 0 OCCASIONS:(1)  <NA>
       V8482        V7108 V8454         V7442         V7441         V8413         V7443         V7444
212324  <NA> (1) NONE:(1)  <NA> (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8)
               V7445         V8417         V8418         V8419         V8483         V8421         V7446
212324 (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8)
               V7447         V8424         V8425 V7448 V7449 V8564 V7548 V7103 V7180 V7181 V7475 V7476 V7477
212324 (8) NEVER:(8) (8) NEVER:(8) (8) NEVER:(8)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7478 V7479 V7480 V7547 V7549 V7550 V7176 V7587 V7557 V7558 V7559 V7560        V7428        V7432
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (1) NONE:(1) (1) NONE:(1)
              V7433        V7435        V7430        V7431        V7434        V7429        V7436 V8473 V8474
212324 (1) NONE:(1) (1) NONE:(1) (1) NONE:(1) (1) NONE:(1) (1) NONE:(1) (1) NONE:(1) (1) NONE:(1)  <NA>  <NA>
       V8475         V7437         V7438         V7439         V7440            V7414            V7415 V7416
212324  <NA> (4) A LOT:(4) (4) A LOT:(4) (4) A LOT:(4) (4) A LOT:(4) (8) CANT SAY:(8) (8) CANT SAY:(8)  <NA>
                  V7417            V7494            V7419            V7420            V7421            V7422
212324 (8) CANT SAY:(8) (8) CANT SAY:(8) (8) CANT SAY:(8) (8) CANT SAY:(8) (8) CANT SAY:(8) (8) CANT SAY:(8)
       V7423            V7412            V7413 V7490            V7425 V7424      V8544 V8477 V7167 V7168 V7169
212324  <NA> (8) CANT SAY:(8) (8) CANT SAY:(8)  <NA> (8) CANT SAY:(8)  <NA> (2) NO:(2)  <NA>  <NA>  <NA>  <NA>
       V7170 V7171 V7172 V7173 V7174 V7175 V7177 V7178 V7179 V7199 V7200                   V7185 V7458
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (4) DEFINATELY WONT:(4)  <NA>
               V7186            V7187            V7188                   V7184 V7451 V7452 V7453 V7454 V7455
212324 (5) AGREE:(5) (1) DISAGREE:(1) (1) DISAGREE:(1) (5) DEFINATELY WONT:(5)  <NA>  <NA>  <NA>  <NA>  <NA>
       V7456 V7457 V8441 V8442 V8443 V8444 V8445 V8446 V8447 V8476 V8540 V8541 V8542 V7481 V7183 V7459 V7460
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7461 V7462 V7463 V7464 V7465 V7466 V7467 V7468 V7469 V7470 V7471 V7472 V7473 V7474 V7182 V7403 V7404
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
               V8455 V7405 V7406 V7407 V7408 V7409 V7410 V7411 V7482              V7701             V7702
212324 (1) NEVER:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (1) NOT AT ALL:(1) (2) <1X MONTH:(2)
                    V7703              V7704              V7705 V7344 V7345 V7346 V7347 V7348 V7349 V7350 V7351
212324 (1) NOT AT ALL:(1) (1) NOT AT ALL:(1) (1) NOT AT ALL:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7352 V7353 V7354 V7355 V7356 V7357 V8547 V8548 V7540 V7541 V8562 V8563            V8456         V8457
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (1) DISAGREE:(1) (5) AGREE:(5)
                  V8458            V8459            V8460                V8461         V8462
212324 (1) DISAGREE:(1) (1) DISAGREE:(1) (1) DISAGREE:(1) (4) MOSTLY AGREE:(4) (5) AGREE:(5)
                        V7718              V7716                  V7717                  V7719
212324 (3) STRONGLY DISAP:(3) (2) DISAPPROVE:(2) (3) STRONGLY DISAP:(3) (3) STRONGLY DISAP:(3)
                        V7720                  V7721           V7359           V7360 V7361 V7362 V7363 V8545
212324 (3) STRONGLY DISAP:(3) (3) STRONGLY DISAP:(3) (1) NO RISK:(1) (1) NO RISK:(1)  <NA>  <NA>  <NA>  <NA>
       V8546 V7364 V7365 V7366 V7367 V7368 V7369 V7370 V8560 V8561 V7371 V7372 V7542 V7543           V7377
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (1) NO RISK:(1)
                 V7577           V7578           V7573           V7574           V7575           V7576
212324 (1) NO RISK:(1) (1) NO RISK:(1) (1) NO RISK:(1) (1) NO RISK:(1) (1) NO RISK:(1) (1) NO RISK:(1)
                 V7579           V7580           V7581           V7582           V7583               V7584
212324 (1) NO RISK:(1) (1) NO RISK:(1) (1) NO RISK:(1) (1) NO RISK:(1) (1) NO RISK:(1) (2) SLIGHT RISK:(2)
                 V7585           V7586           V7710           V7712           V7713           V7706
212324 (1) NO RISK:(1) (1) NO RISK:(1) (8) NO IDEA:(8) (8) NO IDEA:(8) (8) NO IDEA:(8) (8) NO IDEA:(8)
                 V7708           V7709      V7189 V7190 V7191 V7192 V7193 V7194 V7195      V7196 V7197
212324 (8) NO IDEA:(8) (8) NO IDEA:(8) (1) NO:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (1) NO:(1)  <NA>
                  V7222     V7221                   V7223           V7327 V7516 V7517 V7518 V7519          V7329
212324 (4) OTHER/DK:(4) (9) A:(9) (4) DEFINATELY WILL:(4) (2) 1-4 HRS:(2)  <NA>  <NA>  <NA>  <NA> (5) ALWAYS:(5)
               V7330          V7331            V7332          V7334         V7335      V7232       V7233
212324 (1) NEVER:(1) (5) ALWAYS:(5) (3) SOMETIME:(3) (2) SELDOM:(2) (1) NEVER:(1) (0) NO:(0) (1) YES:(1)
             V7301         V7333            V7251         V7252 V7384 V7385 V7386 V7496 V7497 V7387 V7498 V7388
212324 (2) 8TH:(2) (4) OFTEN:(4) (3) SOMETIME:(3) (2) A FEW:(2)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7389 V7499 V7390 V7391 V7392 V7393 V7394 V7395 V7396 V7397 V7500 V7398 V7399 V7400 V7522 V7523 V7524
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7525 V7526 V7527 V7528 V7529 V7530 V7531 V8537 V8538 V7537        V7253        V7228        V7229
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (1) NONE:(1) (1) NONE:(1) (1) NONE:(1)
              V7230        V7231 V8539 V8516        V8522 V7509 V7510 V7511 V7512 V7513 V7514 V7515      V7234
212324 (1) NONE:(1) (1) NONE:(1)  <NA>  <NA> (1) NONE:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (0) NO:(0)
       V8543 V7534 V7535 V7536 V7538                 V7224                   V7225                 V7227
212324  <NA>  <NA>  <NA>  <NA>  <NA> (3) PROBABLY WILL:(3) (4) DEFINATELY WILL:(4) (3) PROBABLY WILL:(3)
                         V7226        V7235 V7238         V7236         V7237          V7374         V7240
212324 (4) DEFINATELY WILL:(4) (1) NONE:(1)  <NA> (01) NONE:(1) (01) NONE:(1) (2) 5 OR <:(2) (1) NEVER:(1)
               V7309         V7310         V7311         V7312                V7313                V7378
212324 (1) NEVER:(1) (1) NEVER:(1) (1) NEVER:(1) (1) NEVER:(1) (5) ALMOST DAILY:(5) (4) ONCE A WEEK+:(4)
                      V7379                V7380                  V7319                V7320                V7321
212324 (4) ONCE A WEEK+:(4) (4) ONCE A WEEK+:(4) (2) FEW TIMES YEAR:(2) (4) ONCE A WEEK+:(4) (4) ONCE A WEEK+:(4)
                 V7214       V7239 V7341 V7532 V7533 V7339 V7340 V7401 V7402            V7219
212324 (3) 1-2 HRS:(3) (1) < 1:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (4) 1/WK OR+:(4)
                        V7220            V7255 V7241 V7242 V7243 V7244 V7258 V7375            V7254
212324 (4) VERY IMPORTANT:(4) (2) YES SOME:(2)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (3) YES M/AL:(3)
                   V7259          V7260         V7261        V7262 V7565                V7302           V8512
212324 (3) SOMETIMES:(3) (2) RARELY:(2) (1) NEVER:(1) (4) MOST:(4)  <NA> (2) PRETTY HAPPY:(2) (3) NEITHER:(3)
                         V8502                V8505            V8509         V8514 V8536         V8501
212324 (2) MOSTLY DISAGREE:(2) (4) MOSTLY AGREE:(4) (1) DISAGREE:(1) (5) AGREE:(5)  <NA> (5) AGREE:(5)
                 V8504                   V8508                   V8503                   V8507           V8511
212324 (3) NEITHER:(3) (2) MOSTLY DISAGREE:(2) (2) MOSTLY DISAGREE:(2) (2) MOSTLY DISAGREE:(2) (3) NEITHER:(3)
                         V8513 V7501 V7502 V7504 V7505 V7507 V7508                   V7503         V7506 V8555
212324 (2) MOSTLY DISAGREE:(2)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (2) MOSTLY DISAGREE:(2) (5) AGREE:(5)  <NA>
       V8556 V8557 V8558 V8565 V8566 V1252        V7202 V1070            V7215           V7216           V7217
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (1) MALE:(1)  <NA> (6) GRAD SCH:(6) (3) HS GRAD:(3) (3) YES F/T:(3)
                V7206              V7207              V7208            V7205 V8517 V8518        V8519
212324 (1) MARKED:(1) (0) NOT MARKED:(0) (0) NOT MARKED:(0) (3) CITYTOWN:(3)  <NA>  <NA> (1) NONE:(1)
              V8520 V8521 V8523 V8515 V8526 V8527 V8528 V8529 V8530 V8531 V7555      V7101D      V7102D
212324 (1) NONE:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> (0) NO: (0) (0) NO: (0)
            V7105D      V7106D      V7107D      V7112D      V7113D      V7114D      V7115D      V7116D
212324 (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0)
            V7117D      V7118D      V7119D      V7120D      V7127D      V7128D      V7129D      V7097D
212324 (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0)
            V7098D      V7099D      V7133D      V7134D      V7135D      V7142D      V7143D      V7144D
212324 (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0) (0) NO: (0)
            V7139D      V7140D      V7141D        V7593 V7591 V7592        V7615        V7616        V7617 V7613
212324 (0) NO: (0) (0) NO: (0) (0) NO: (0) (2) SOME:(2)  <NA>  <NA> (1) NONE:(1) (1) NONE:(1) (1) NONE:(1)  <NA>
                 V7610           V7612         V7638 V7637 V7640        V7642 V7648 V7649 V7652 V7655 V7650 V7653
212324 (1) NO RISK:(1) (1) NO RISK:(1) (8) NEVER:(8)  <NA>  <NA> (1) NONE:(1)  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7656 V7651 V7654 V7657 V7669 V7643 V7658 V7659 V7666 V7668 V7646 V7647 V7661 V7662 V7663 V7664 V7665
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7644 V7645 V7670 V7671 V7672 V7673    V4            V7325                V7317              V7318
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 55205 (3) ONE HOUR:(3) (4) ONCE A WEEK+:(4) (3) 1-2X MONTH:(3)
               V7322         V7323                V7381           V7326         V7539                V7552 V7544
212324 (1) NEVER:(1) (1) NEVER:(1) (4) ONCE A WEEK+:(4) (5) 5-6 HRS:(5) (1) NEVER:(1) (5) ALMOST DAILY:(5)  <NA>
       V7551 V7553 V7562 V7563 V7343            V7588 V7589 V7590        V7618              V8401
212324  <NA>  <NA>  <NA>  <NA>  <NA> (2) 1/2 HOUR:(2)  <NA>  <NA> (1) NONE:(1) (1) NOT AT ALL:(1)
                    V8402              V8403              V8404 V8478 V7570        V7614 V7611 V7625 V7626 V7627
212324 (1) NOT AT ALL:(1) (1) NOT AT ALL:(1) (1) NOT AT ALL:(1)  <NA>  <NA> (1) NONE:(1)  <NA>  <NA>  <NA>  <NA>
       V7628 V7629 V7630 V7631 V7632 V7633 V7634 V7635 V7636 V7487 V7556 V7619 V7620 V7621 V7622 V7623 V7624
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
       V7571 V7572 V7714 V7715 V7711 V7707 V7198 V7324 V7545 V7546 V7667 AI_08 AI_10 V7693 V7694 V7695 V7676
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>    NA    NA  <NA>  <NA>  <NA>  <NA>
       V7677 V7678 V7682 V7684 V7685 V7686 V7687 V7688 V7689 V7690 V7679 V7680 V7681 V7683 V7696 V7691 V7692
212324  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
 [ reached 'max' / getOption("max.print") -- omitted 9 rows ]

Solution

  • This is how you could do:

    library(data.table)
    
    # minimal example
    set.seed(1)
    DATA <- data.table(V1    = sample(3, 10, replace = T),
                       V7101 = sample(3, 10, replace = T),
                       V7102 = sample(3, 10, replace = T),
                       V712  = sample(3, 10, replace = T),
                       V7200 = sample(3, 10, replace = T),
                       V507  = sample(3, 10, replace = T))
    
    # variables you need to cycle on
    vars <- c("V7101", "V7102", "V712", "V7200")
    
    # create all formulas you need (set names for clarity)
    frms <- setNames(sprintf("V507 ~ %s + V1", vars), vars)
    
    # cycle with lapply over your formulas
    lapply(frms, function(frm) dcast(data = DATA, frm, fun.aggregate = length))
    #> $V7101
    #>    V507 1_1 1_2 1_3 2_1 2_2 2_3 3_1 3_2
    #> 1:    1   0   0   0   0   0   1   0   0
    #> 2:    2   1   1   2   1   1   1   0   1
    #> 3:    3   0   0   0   0   0   0   1   0
    #> 
    #> $V7102
    #>    V507 1_1 1_2 1_3 2_2 2_3 3_1
    #> 1:    1   0   0   0   0   1   0
    #> 2:    2   2   2   2   1   1   0
    #> 3:    3   0   0   0   0   0   1
    #> 
    #> $V712
    #>    V507 1_2 1_3 2_1 2_2 2_3 3_1 3_3
    #> 1:    1   0   0   0   0   1   0   0
    #> 2:    2   1   1   0   2   1   2   1
    #> 3:    3   0   0   1   0   0   0   0
    #> 
    #> $V7200
    #>    V507 1_1 1_3 2_1 2_2 3_1 3_3
    #> 1:    1   0   1   0   0   0   0
    #> 2:    2   1   1   0   3   1   2
    #> 3:    3   0   0   1   0   0   0
    

    Created on 2022-06-28 by the reprex package (v2.0.1)