How to merge different columns into a new one made with the merged columns' name

I'm trying to clean my dataset. The dataset comes from a survey that had a randomizer. It displayed different scenarios to each participant. My dataset now has a column for each different scenario with the name I chose for it (e.g.: A_SM_GIL or D_DF_GIL etc.). The underscore "" separates the different scenarios variables that are combined together to form a new scenario. A, D_, B_, N_ are the timing for a disclosure message during the advertising, respectively AFTER, DURING, BEFORE,and NONEF. SM_, and DF_, stand for the type of terminology used. Respectively SYNTHETIC MEDIA, and DEEPFAKE. The last bit, LOR_, GIL_, describes the brand's ad. Respectively L'Oreal, Gillette.

What I am left now is a bunch of columns that show with a "1" the scenario each observation was exposed to before answering a 7point likert scale to measure their attitudes towards the ad shown. The scale used is called ADTEST (AD_) and has different items (BORING_1, IRRITATING_1, etc).

Only 1 scenario for observation is possible. So one observation will have a column with 1 and all the others with NAs.

Example

My goal is to compare the different scenarios' attitudes. For example, studying if positioning the disclosure before the ad makes a difference than positioning it after the ad. I would like to plot the different answers (using a 7 point likert scale i.e.: AD_BORING_1 etc) people gave but divided into the different scenarios to compare them.

structure(list(D_DF_GIL = c(NA, NA, NA, NA, NA, NA, NA, 1, NA, 
NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 
1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 
1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 
1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, 
1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA), A_SM_GIL = c(NA, NA, NA, NA, 1, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 
NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA), A_DF_GIL = c(NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 
NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), N_DF_GILL = c(1, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 
NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 
NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, 1, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, 1, NA, 
NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, 1, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA), AD_BORING_1 = c("7", 
"6", "5", "3", "4", "3", "5", "2", "4", "5", "3", "2", "5", "3", 
"4", "4", "5", "5", "1", "1", "4", "7", "4", "4", "3", "6", "1", 
"5", "2", "5", "3", "2", "2", "7", "6", "6", "6", "5", "4", "4", 
"6", "7", "3", "2", "1", "5", "5", "5", "5", "5", "6", "4", "5", 
"3", "5", "2", "7", "5", "2", "2", "3", "1", "5", "5", "4", "5", 
"1", "3", "2", "6", "5", "1", "3", "3", "5", "6", "5", "6", "2", 
"3", "5", "6", "5", "4", "6", "5", "4", "3", "5", "5", "4", "6", 
"2", "4", "6", "3", "4", "5", "3", "2", "6", "6", "5", "6", "3", 
"2", "6", "5", "4", "2", "3", "6", "4", "7", "3", "1", "4", "4", 
"5", "4", "2", "5", "6", "3", "5", "6", "4", "2", "5", "5", "3", 
"2", "3", "1", "6", "2", "1", "5", "5", "2", "6", "1", "6", "5", 
"2", "5", "2", "2", "4", "2", "2", "4", "4", "6", "3", "5", "5", 
"3", "2", "4", "7", "4", "4", "2", "5", "3", "2", "3", "3", "4", 
"2", "5", "6", "4", "4", "7", "4", "6", "3", "4", "2", "4", "3", 
"2", "6", "5", "5", "5", "4", "2", "3", "3", "5", "5", "6", "6", 
"7", "4", "2", "6", "3", "6", "4", "2", "7", "6", "4", "3", "2", 
"5", "5", "6", "5", "2", "7", "2", "3", "5", "2", "3", "5", "5", 
"5", "2", "4", "3", "5", "2", "3", "3", "2", "5", "5", "3", "3", 
"5", "3", "2", "5", "3", "7", "5", "5", "5", "4", "2", "4", "2", 
"3", "4", "5", "2", "5", "7", "6", "4", "5", "6", "3", "5", "3", 
"2", "4", "5", "5", "3", "1", "4", "7", "5", "6", "3", "3", "4", 
"5", "6", "5", "4", "1", "5", "2", "3", "7", "3", "4", "5", "3", 
"3", "5", "5", "2", "5", "4", "5", "2", "6", "2", "6", "4", "2", 
"3", "4", "6", "3", "2", "5", "2", "6", "2", "1", "3", "4", "1", 
"2", "5", "4", "3", "7", "5", "6", "6", "3", "4", "2", "4", "5", 
"2", "4", "3", "3", "2", "2", "3", "5", "3", "1", "3", "2", "2", 
"4", "2", "2", "3", "1", "4", "2", "5", "2", "5", "5", "5", "2", 
"5", "5", "4", "2", "7", "5", "5", "3", "4", "5", "3", "4", "3", 
"2", "5"), AD_IRRITATING_1 = c("4", "7", "3", "5", "4", "3", 
"4", "4", "4", "3", "4", "2", "2", "4", "1", "2", "1", "4", "1", 
"1", "4", "7", "5", "4", "2", "2", "6", "4", "2", "5", "1", "2", 
"2", "4", "2", "5", "4", "6", "4", "4", "7", "6", "3", "2", "1", 
"4", "2", "2", "4", "2", "7", "5", "2", "5", "2", "2", "6", "2", 
"5", "2", "2", "4", "6", "5", "4", "3", "2", "5", "1", "4", "2", 
"2", "2", "2", "2", "4", "5", "3", "5", "5", "1", "4", "4", "5", 
"4", "4", "4", "4", "4", "2", "2", "4", "2", "5", "7", "4", "5", 
"3", "2", "1", "4", "6", "3", "6", "3", "2", "6", "2", "3", "2", 
"2", "4", "2", "7", "3", "1", "4", "5", "2", "4", "1", "5", "5", 
"5", "5", "6", "2", "3", "5", "5", "2", "2", "3", "2", "6", "2", 
"1", "4", "2", "2", "5", "2", "2", "3", "2", "4", "2", "2", "2", 
"2", "2", "4", "5", "5", "1", "5", "2", "5", "1", "2", "2", "4", 
"5", "2", "4", "3", "2", "5", "2", "4", "2", "2", "4", "3", "5", 
"5", "3", "3", "1", "5", "2", "5", "6", "3", "4", "2", "6", "4", 
"4", "2", "2", "2", "2", "2", "4", "1", "6", "3", "2", "5", "1", 
"4", "5", "2", "2", "2", "6", "1", "1", "2", "3", "5", "7", "5", 
"7", "2", "3", "2", "3", "2", "1", "2", "5", "2", "4", "4", "6", 
"2", "3", "3", "1", "5", "4", "4", "3", "4", "4", "2", "4", "4", 
"5", "4", "6", "4", "4", "2", "5", "2", "2", "2", "7", "2", "3", 
"6", "5", "3", "3", "6", "1", "6", "2", "2", "5", "4", "2", "4", 
"1", "2", "4", "6", "4", "1", "2", "4", "2", "2", "4", "3", "1", 
"2", "2", "4", "4", "3", "5", "2", "4", "4", "5", "5", "3", "5", 
"4", "2", "2", "4", "5", "4", "2", "5", "2", "4", "3", "2", "1", 
"2", "2", "6", "5", "2", "1", "2", "1", "3", "6", "4", "4", "6", 
"3", "4", "4", "2", "2", "1", "4", "1", "2", "3", "2", "2", "5", 
"2", "3", "7", "7", "3", "2", "2", "3", "3", "1", "5", "2", "1", 
"4", "2", "5", "2", "5", "4", "4", "2", "5", "6", "2", "1", "2", 
"4", "4", "2", "5", "2", "4", "2", "5", "2", "7")), row.names = c(NA, 
-367L), class = c("tbl_df", "tbl", "data.frame"))

I was thinking I could create a new column made of the other columns' name if a condition is met (in this case the fact that a column has a 1 and not NA).

Something like this

Example result

Another problem is all around the dataset there are other columns, so I need to specify exactly the columns to analyze.

Thank you so much for your time.

Upvotes: 1

Views: 79

Answers (3)

Dan Adams
Dan Adams

Reputation: 5204

Explanation of Answer

Here you can get what I think you're after with two successive applications of tidyr::pivot_longer().

  1. The first pivot_longer() consolidates all the different scenarios into a single column so there is still one row per participant and one column that indicates what scenario group that participant was in.
  2. Next you use pivot_longer() again to get the different adjectives into a single column.
  3. I run a dplyr::mutate() with stringr::str_extract() to parse the adjective column.
  4. Since you have some important metadata embedded in the scenario name, you can parse that out with tidyr::separate()
  5. Also it looks like you have two different spellings of GIL/GILL so I cleaned that up which will help them sort together, but omit if that was intentional.
  6. Since these seem like discrete variables I think it will be easier downstream if you convert them all to factors with mutate(across(everything(), factor)).

Once cleaned in this way, the data should be much easier to work with and visualize.

Main Answer

library(tidyverse)

d <- structure(list(D_DF_GIL = c(NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA), A_SM_GIL = c(NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA), A_DF_GIL = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), N_DF_GILL = c(1, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 
NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA), AD_BORING_1 = c("7", "6", "5", "3", "4", "3", "5", "2", "4", "5", "3", "2", "5", "3", "4", "4", "5", "5", "1", "1", "4", "7", "4", "4", "3", "6", "1", "5", "2", "5", "3", "2", "2", "7", "6", "6", "6", "5", "4", "4", "6", "7", "3", "2", "1", "5", "5", "5", "5", "5", "6", "4", "5", "3", "5", "2", "7", "5", "2", "2", "3", "1", "5", "5", "4", "5", "1", "3", "2", "6", "5", "1", "3", "3", "5", "6", "5", "6", "2", "3", "5", "6", "5", "4", "6", "5", "4", "3", "5", "5", "4", "6", "2", "4", "6", "3", "4", "5", "3", "2", "6", "6", "5", "6", "3", "2", "6", "5", "4", "2", "3", "6", "4", "7", "3", "1", "4", "4", "5", "4", "2", "5", "6", "3", "5", "6", "4", "2", "5", "5", "3", "2", "3", "1", "6", "2", "1", "5", "5", "2", "6", "1", "6", "5", "2", "5", "2", "2", "4", "2", "2", "4", "4", "6", "3", "5", "5", "3", "2", "4", "7", "4", "4", "2", "5", "3", "2", "3", "3", "4", "2", "5", "6", "4", "4", "7", "4", "6", "3", "4", "2", "4", "3", "2", "6", "5", "5", "5", "4", "2", "3", "3", "5", "5", "6", "6", "7", "4", "2", "6", "3", "6", "4", "2", "7", "6", "4", "3", "2", "5", "5", "6", "5", "2", "7", "2", "3", "5", "2", "3", "5", "5", "5", "2", "4", "3", "5", "2", "3", "3", "2", "5", "5", "3", "3", "5", "3", "2", "5", "3", "7", "5", "5", "5", "4", "2", "4", "2", "3", "4", "5", "2", "5", "7", "6", "4", "5", "6", "3", "5", "3", "2", "4", "5", "5", "3", "1", "4", "7", "5", "6", "3", "3", "4", "5", "6", "5", "4", "1", "5", "2", "3", "7", "3", "4", "5", "3", "3", "5", "5", "2", "5", "4", "5", "2", "6", "2", "6", "4", "2", "3", "4", "6", "3", "2", "5", "2", "6", "2", "1", "3", "4", "1", "2", "5", "4", "3", "7", "5", "6", "6", "3", "4", "2", "4", "5", "2", "4", "3", "3", "2", "2", "3", "5", "3", "1", "3", "2", "2", "4", "2", "2", "3", "1", "4", "2", "5", "2", "5", "5", "5", "2", "5", "5", "4", "2", "7", "5", "5", "3", "4", "5", "3", "4", "3", "2", "5"), AD_IRRITATING_1 = c("4", "7", "3", "5", "4", "3", "4", "4", "4", "3", "4", "2", "2", "4", "1", "2", "1", "4", "1", "1", "4", "7", "5", "4", "2", "2", "6", "4", "2", "5", "1", "2", "2", "4", "2", "5", "4", "6", "4", "4", "7", "6", "3", "2", "1", "4", "2", "2", "4", "2", "7", "5", "2", "5", "2", "2", "6", "2", "5", "2", "2", "4", "6", "5", "4", "3", "2", "5", "1", "4", "2", "2", "2", "2", "2", "4", "5", "3", "5", "5", "1", "4", "4", "5", "4", "4", "4", "4", "4", "2", "2", "4", "2", "5", "7", "4", "5", "3", "2", "1", "4", "6", "3", "6", "3", "2", "6", "2", "3", "2", "2", "4", "2", "7", "3", "1", "4", "5", "2", "4", "1", "5", "5", "5", "5", "6", "2", "3", "5", "5", "2", "2", "3", "2", "6", "2", "1", "4", "2", "2", "5", "2", "2", "3", "2", "4", "2", "2", "2", "2", "2", "4", "5", "5", "1", "5", "2", "5", "1", "2", "2", "4", "5", "2", "4", "3", "2", "5", "2", "4", "2", "2", "4", "3", "5", "5", "3", "3", "1", "5", "2", "5", "6", "3", "4", "2", "6", "4", "4", "2", "2", "2", "2", "2", "4", "1", "6", "3", "2", "5", "1", "4", "5", "2", "2", "2", "6", "1", "1", "2", "3", "5", "7", "5", "7", "2", "3", "2", "3", "2", "1", "2", "5", "2", "4", "4", "6", "2", "3", "3", "1", "5", "4", "4", "3", "4", "4", "2", "4", "4", "5", 
"4", "6", "4", "4", "2", "5", "2", "2", "2", "7", "2", "3", "6", "5", "3", "3", "6", "1", "6", "2", "2", "5", "4", "2", "4", "1", "2", "4", "6", "4", "1", "2", "4", "2", "2", "4", "3", "1", "2", "2", "4", "4", "3", "5", "2", "4", "4", "5", "5", "3", "5", "4", "2", "2", "4", "5", "4", "2", "5", "2", "4", "3", "2", "1", "2", "2", "6", "5", "2", "1", "2", "1", "3", "6", "4", "4", "6", "3", "4", "4", "2", "2", "1", "4", "1", "2", "3", "2", "2", "5", "2", "3", "7", "7", "3", "2", "2", "3", "3", "1", "5", "2", "1", "4", "2", "5", "2", "5", "4", "4", "2", "5", "6", "2", "1", "2", "4", "4", "2", "5", "2", "4", "2", "5", "2", "7")), row.names = c(NA, -367L), class = c("tbl_df", "tbl", "data.frame"))

# make labels in case that helps
likert_breaks <- c("Strongly Disagree", "Somewhat Disagree", "Slightly Disagree", "Neutral", "Slightly Agree", "Somewhat Agree", "Strongly Agree")

# transform to long format and parse out metadata
d_long <- d %>%
  pivot_longer(cols = !starts_with("AD"), 
               names_to = "group", 
               values_to = "drop", 
               values_drop_na = T) %>%
  select(-drop) %>%
  pivot_longer(cols = starts_with("AD"),
               names_to = "adjective",
               values_to = "likert") %>% 
  mutate(adjective = str_extract(adjective, "(?<=_)(.*)(?=_)")) %>% 
  separate(group, into = c("pretreat", "treat", "ad")) %>% 
  mutate(ad = if_else(ad == "GILL", "GIL", ad)) %>%
  mutate(across(everything(), factor))
  
str(d_long)
#> tibble [150 x 5] (S3: tbl_df/tbl/data.frame)
#>  $ pretreat : Factor w/ 3 levels "A","D","N": 3 3 1 1 2 2 3 3 2 2 ...
#>  $ treat    : Factor w/ 2 levels "DF","SM": 1 1 2 2 1 1 1 1 1 1 ...
#>  $ ad       : Factor w/ 1 level "GIL": 1 1 1 1 1 1 1 1 1 1 ...
#>  $ adjective: Factor w/ 2 levels "BORING","IRRITATING": 1 2 1 2 1 2 1 2 1 2 ...
#>  $ likert   : Factor w/ 7 levels "1","2","3","4",..: 7 4 4 4 2 4 4 4 3 4 ...

Bonus: Plotting

Since I got the impression you were hoping to look at the response profile by treatment group I wanted to provide some code to get you a plot of that fashion. Here there are a couple of important steps to make sure you get all of the bars in all plots in the right position.

  1. Above we turned all the variables into factors to ensure they can keep even empty levels.
  2. Then we use dplyr::summarize(n = n()) to count the responses per group per likert score.
  3. Because the variables are all factors we can then use tidyr::complete() to expand out all of the groups and fill 0 when there was no response of that type. This way we will force the graph to keep space for every bar even if it wasn't observed in the data.
# bonus: plot the data
d_long %>% 
  group_by(across(everything())) %>% 
  summarize(n = n(), .groups = "drop") %>% 
  complete(pretreat, treat, ad, adjective, likert, fill = list(n = 0)) %>% 
  ggplot(aes(x = adjective, y = n, fill = likert)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_grid(pretreat ~ treat) +
  scale_fill_viridis_d(option = "A", begin = 0, end = 0.85, labels = likert_breaks, drop = F) +
  theme_bw()

Created on 2022-02-09 by the reprex package (v2.0.1)

Upvotes: 2

Gregor Thomas
Gregor Thomas

Reputation: 145775

I'd do it like this:

scenario_cols = df %>%
  select(D_DF_GIL:N_DF_GILL) %>%
  names
  
df$new_col = scenario_cols[apply(
  df[scenario_cols], 1, 
  \(x) if(all(is.na(x))) NA else which.max(x)
)]
df$new_col
 #  [1] "N_DF_GILL" NA          NA          NA          "A_SM_GIL"  NA          NA          "D_DF_GIL" 
 #  [9] "N_DF_GILL" NA          NA          NA          NA          "D_DF_GIL"  NA          NA         
 # [17] NA          NA          NA          NA          NA          NA          NA          NA         
 # [25] NA          NA          NA          NA          NA          NA          "N_DF_GILL" NA         
 # [33] "A_DF_GIL"  NA          NA          "A_SM_GIL"  NA          NA          NA          "A_SM_GIL" 
 # ...

Upvotes: 0

Claudiu Papasteri
Claudiu Papasteri

Reputation: 2609

What you want to do is transform many dummy variables to one factor variable (with levels corresponding to dummy variable names).

I give a small reproducible example similar to your data:

library(tidyverse)

df <- structure(list(dummy1 = c(NA, 1, NA, NA), 
                      dummy2 = c(1, NA, 1, NA), dummy3 = c(NA, NA, NA, 1)), 
                 .Names = c("dummy1", "dummy2", "dummy3"), class = "data.frame", row.names = c(NA, -4L))

df
#>   dummy1 dummy2 dummy3
#> 1     NA      1     NA
#> 2      1     NA     NA
#> 3     NA      1     NA
#> 4     NA     NA      1

df %>%
  tidyr::pivot_longer(cols = dummy1:dummy3, names_to = "dummy", values_to = "value", values_drop_na = TRUE) %>%
  dplyr::mutate(dummy = as.factor(dummy)) %>%
  dplyr::select(-value)
#> # A tibble: 4 x 1
#>   dummy 
#>   <fct> 
#> 1 dummy2
#> 2 dummy1
#> 3 dummy2
#> 4 dummy3

Created on 2022-02-08 by the reprex package (v2.0.1)

UPDATE: After posting your data, I simplified to only the pivot_longer (the mutate transformed dummy to factor, the select just dropped the value column that you don't need).

df %>%
    tidyr::pivot_longer(cols = D_DF_GIL:N_DF_GILL, names_to = "dummy", values_to = "value", values_drop_na = TRUE)
# A tibble: 75 x 4
   AD_BORING_1 AD_IRRITATING_1 dummy     value
   <chr>       <chr>           <chr>     <dbl>
 1 7           4               N_DF_GILL     1
 2 4           4               A_SM_GIL      1
 3 2           4               D_DF_GIL      1
 4 4           4               N_DF_GILL     1
 5 3           4               D_DF_GIL      1
 6 3           1               N_DF_GILL     1
 7 2           2               A_DF_GIL      1
 8 6           5               A_SM_GIL      1
 9 4           4               A_SM_GIL      1
10 1           1               N_DF_GILL     1
# ... with 65 more rows

Upvotes: 2

Related Questions