Delete the data of all participants who did not end the experiment at (a) certain page(s) and/or app(s).

Caution 1: This function does not delete cases from the original CSV and Excel files!

Caution 2: This function does not delete cases from custom exports if the custom exports do not have a variable named participant.code and a variable named session.code!

Caution 3: This function does not delete any data from the Chats data frame! (As the interpretation of chat data depends on how participants engage with each other, the data must be deleted with more care than deleting data in other apps. Hence, this function does not delete data in this data frame. Please do this manually if necessary!)

delete_dropouts(
  oTree,
  final_apps = NULL,
  final_pages = NULL,
  saved_vars = NULL,
  inconsistent = NULL,
  reason = "ENC",
  info = FALSE
)

Arguments

oTree

A list of data frames that were created by import_otree().

final_apps

Character. The name(s) of the app(s) at which the participants have to finish the experiment.

final_pages

Character. The name(s) of the page(s) at which the participants have to finish the experiment.

saved_vars

Character. The name(s) of variable(s) that need(s) to be stored in the list of information on deleted cases in $info$deleted_cases.

inconsistent

Character. Should the function continue or be stopped if at least one participant has inconsistent end_pages, inconsistent end_apps, or both? To continue, type "yes," to stop the function, type "no."

reason

Character. The reason for deletion that should be stored in the list of information on deleted cases in $info$deleted_cases.

info

Logical. TRUE if a brief information on the dropout deletion process should be printed.

Value

This function returns a duplicate of the original oTree list of data frames but without the deleted cases.

It adds information on the deleted cases to $info$deleted_cases. (This list is also filled by other functions.)

In this list, you can find the following information:

$full = A data frame that contains information on all participants who did not finish the study; it shows their participant codes, the names of the apps in which they left the experiment, the names of the pages in which they left the experiment, the names of the app data frames in which this information was found, and the dropout reason ("ENC," experiment not completed, combined with the name of the data frame in which the dropout was observed). Because participants usually appear in multiple app data frames, the $info$deleted_cases$full data frame may contain several entries for each person.

$unique = A data frame that contains similar information as the $full data frame but with only one row per participant and no information on the data frame in which the dropout was observed.

$all_end = A table that provides information on the app and page combinations where participants ended the experiment. This table also includes information for participants who did not drop out of the experiment. The $all_end table is only shown if an all_apps_wide data frame exists.

$codes = A vector containing the participant codes of all deleted participants.

$count = The number of all deleted participants.

It is important to note that if only the argument final_pages is set, this function does not distinguish between page names that reoccur in different apps.

If the columns end_app and end_page in the output are empty, these variables were not saved by oTree for the specific participants. This could be because empty rows were not deleted. This can be done by using the argument "del_empty = TRUE" when using import_otree().

Examples

# Use package-internal list of oTree data frames
oTree <- gmoTree::oTree

# First, show some row numbers
print(paste(nrow(oTree$all_apps_wide), nrow(oTree$survey),
nrow(oTree$Time), nrow(oTree$Chats)))
#> [1] "29 25 289 35"

# Delete all cases that didn't end the experiment on the page "Demographics"
# within the app "survey"
oTree2 <- delete_dropouts(oTree,
                         final_apps = c("survey"),
                         final_pages = c("Demographics"))

# Show row numbers again
print(paste(nrow(oTree2$all_apps_wide), nrow(oTree2$survey),
nrow(oTree2$Time), nrow(oTree2$Chats)))
#> [1] "20 16 248 35"

# Delete all cases that didn't end the experiment on the page "Demographics"
# This page can be in any app
oTree2 <- delete_dropouts(oTree, final_pages = "Demographics")

# Show row numbers again
print(paste(nrow(oTree2$all_apps_wide), nrow(oTree2$survey),
nrow(oTree2$Time), nrow(oTree2$Chats)))
#> [1] "20 16 248 35"

# Delete all cases that didn't end the experiment on
# any page in the app "survey"
oTree <- delete_dropouts(oTree, final_apps = "survey")

# Show row numbers again
print(paste(nrow(oTree2$all_apps_wide), nrow(oTree2$survey),
nrow(oTree2$Time), nrow(oTree2$Chats)))
#> [1] "20 16 248 35"

# Get list of information on all deleted cases
# (If there is already a list, the new list is added to it!)
oTree2$info$deleted_cases
#> $full
#>    participant.code session.code  end_app        end_page
#> 1          164r1hs4     7bfqtokx  chatapp            chat
#> 2          164r1hs4     7bfqtokx  chatapp            chat
#> 3          164r1hs4     7bfqtokx  chatapp            chat
#> 4          164r1hs4     7bfqtokx  chatapp            chat
#> 5          2scvem7a     vd1h01iv dictator ResultsWaitPage
#> 6          2scvem7a     vd1h01iv dictator ResultsWaitPage
#> 7          2scvem7a     vd1h01iv dictator ResultsWaitPage
#> 8          2scvem7a     vd1h01iv dictator ResultsWaitPage
#> 9          7wa8kk3d     l8ecm1uh dictator    Introduction
#> 10         7wa8kk3d     l8ecm1uh dictator    Introduction
#> 11         7wa8kk3d     l8ecm1uh dictator    Introduction
#> 12         7wa8kk3d     l8ecm1uh dictator    Introduction
#> 13         ao9kqvqn     l8ecm1uh dictator    Introduction
#> 14         ao9kqvqn     l8ecm1uh dictator    Introduction
#> 15         ao9kqvqn     l8ecm1uh dictator    Introduction
#> 16         ao9kqvqn     l8ecm1uh dictator    Introduction
#> 17         d4sq7zio     l8ecm1uh dictator    Introduction
#> 18         d4sq7zio     l8ecm1uh dictator    Introduction
#> 19         d4sq7zio     l8ecm1uh dictator    Introduction
#> 20         d4sq7zio     l8ecm1uh dictator    Introduction
#> 21         jxh15obl     t0rog7nz   survey           Offer
#> 22         jxh15obl     t0rog7nz   survey           Offer
#> 23         jxh15obl     t0rog7nz   survey           Offer
#> 24         jxh15obl     t0rog7nz   survey           Offer
#> 25         ktjz5jli     7bfqtokx dictator ResultsWaitPage
#> 26         ktjz5jli     7bfqtokx dictator ResultsWaitPage
#> 27         ktjz5jli     7bfqtokx dictator ResultsWaitPage
#> 28         ktjz5jli     7bfqtokx dictator ResultsWaitPage
#> 29         vbhvhozv     vd1h01iv dictator ResultsWaitPage
#> 30         vbhvhozv     vd1h01iv dictator ResultsWaitPage
#> 31         vbhvhozv     vd1h01iv dictator ResultsWaitPage
#> 32         vbhvhozv     vd1h01iv dictator ResultsWaitPage
#> 33         znri6myc     l8ecm1uh dictator    Introduction
#> 34         znri6myc     l8ecm1uh dictator    Introduction
#> 35         znri6myc     l8ecm1uh dictator    Introduction
#> 36         znri6myc     l8ecm1uh dictator    Introduction
#>                            reason
#> 1         ENC. Noticed at: survey
#> 2  ENC. Noticed at: all_apps_wide
#> 3        ENC. Noticed at: chatapp
#> 4       ENC. Noticed at: dictator
#> 5  ENC. Noticed at: all_apps_wide
#> 6        ENC. Noticed at: chatapp
#> 7       ENC. Noticed at: dictator
#> 8         ENC. Noticed at: survey
#> 9  ENC. Noticed at: all_apps_wide
#> 10       ENC. Noticed at: chatapp
#> 11      ENC. Noticed at: dictator
#> 12        ENC. Noticed at: survey
#> 13 ENC. Noticed at: all_apps_wide
#> 14       ENC. Noticed at: chatapp
#> 15      ENC. Noticed at: dictator
#> 16        ENC. Noticed at: survey
#> 17       ENC. Noticed at: chatapp
#> 18      ENC. Noticed at: dictator
#> 19        ENC. Noticed at: survey
#> 20 ENC. Noticed at: all_apps_wide
#> 21      ENC. Noticed at: dictator
#> 22        ENC. Noticed at: survey
#> 23 ENC. Noticed at: all_apps_wide
#> 24       ENC. Noticed at: chatapp
#> 25 ENC. Noticed at: all_apps_wide
#> 26       ENC. Noticed at: chatapp
#> 27      ENC. Noticed at: dictator
#> 28        ENC. Noticed at: survey
#> 29 ENC. Noticed at: all_apps_wide
#> 30       ENC. Noticed at: chatapp
#> 31      ENC. Noticed at: dictator
#> 32        ENC. Noticed at: survey
#> 33 ENC. Noticed at: all_apps_wide
#> 34       ENC. Noticed at: chatapp
#> 35      ENC. Noticed at: dictator
#> 36        ENC. Noticed at: survey
#> 
#> $unique
#>    participant.code session.code  end_app        end_page reason
#> 1          164r1hs4     7bfqtokx  chatapp            chat    ENC
#> 5          2scvem7a     vd1h01iv dictator ResultsWaitPage    ENC
#> 9          7wa8kk3d     l8ecm1uh dictator    Introduction    ENC
#> 13         ao9kqvqn     l8ecm1uh dictator    Introduction    ENC
#> 17         d4sq7zio     l8ecm1uh dictator    Introduction    ENC
#> 21         jxh15obl     t0rog7nz   survey           Offer    ENC
#> 25         ktjz5jli     7bfqtokx dictator ResultsWaitPage    ENC
#> 29         vbhvhozv     vd1h01iv dictator ResultsWaitPage    ENC
#> 33         znri6myc     l8ecm1uh dictator    Introduction    ENC
#> 
#> $all_end
#>           
#>            Demographics Introduction Offer ResultsWaitPage chat
#>   chatapp             0            0     0               0    1
#>   dictator            0            4     0               3    0
#>   survey             20            0     1               0    0
#> 
#> $codes
#> [1] "164r1hs4" "2scvem7a" "7wa8kk3d" "ao9kqvqn" "d4sq7zio" "jxh15obl" "ktjz5jli"
#> [8] "vbhvhozv" "znri6myc"
#> 
#> $count
#> [1] 9
#>