unomas83
unomas83

Reputation: 151

tidyr::gather can't find my value variables

I have an extremely large data.frame. I reproduce part of it.

     RECORDING_SESSION_LABEL condition TRIAL_INDEX IA_LABEL IA_DWELL_TIME
1                         23     match           1     eyes          3580
2                         23     match           1     nose          2410
3                         23     match           1    mouth          1442
4                         23     match           1     face           841
5                         23  mismatch           3     eyes          1817
6                         23  mismatch           3     nose          1724
7                         23  mismatch           3    mouth          1600
8                         23  mismatch           3     face          1136
9                         23  mismatch           4     eyes          4812
10                        23  mismatch           4     nose          3710
11                        23  mismatch           4    mouth          4684
12                        23  mismatch           4     face          1557
13                        23  mismatch           6     eyes          4645
14                        23  mismatch           6     nose          2321
15                        23  mismatch           6    mouth           674
16                        23  mismatch           6     face           684
17                        23     match           7     eyes          1062
18                        23     match           7     nose          1359
19                        23     match           7    mouth           215
20                        23     match           7     face             0

I need to calculate the percentage of IA_DWELL_TIME for each IA_LABEL in each trial index. For that, I first put IA_label in different columns

data_IA_DWELL_TIME <- tidyr::spread(data_IA_DWELL_TIME, key = IA_LABEL, value = IA_DWELL_TIME) 

For calculating the percentage, I create a new dataframe:

data_IA_DWELL_TIME_percentage <-data_IA_DWELL_TIME
data_IA_DWELL_TIME_percentage$eyes <- 100*(data_IA_DWELL_TIME$eyes/(rowSums(data_IA_DWELL_TIME[,c("eyes","nose","mouth","face")])))
data_IA_DWELL_TIME_percentage$nose <- 100*(data_IA_DWELL_TIME$nose/(rowSums(data_IA_DWELL_TIME[,c("eyes","nose","mouth","face")])))
data_IA_DWELL_TIME_percentage$mouth <- 100*(data_IA_DWELL_TIME$mouth/(rowSums(data_IA_DWELL_TIME[,c("eyes","nose","mouth","face")])))
data_IA_DWELL_TIME_percentage$face <- 100*(data_IA_DWELL_TIME$face/(rowSums(data_IA_DWELL_TIME[,c("eyes","nose","mouth","face")])))

So all is fine, and I get the wanted output. The problem is when I want to put the columns back to the rows

data_IA_DWELL_TIME_percentage <- tidyr::gather(key = IA_LABEL, value = IA_DWELL_TIME,-RECORDING_SESSION_LABEL,-condition, -TRIAL_INDEX)

I obtain this error:

Error in tidyr::gather(key = IA_LABEL, value = IA_DWELL_TIME, -RECORDING_SESSION_LABEL, : object 'RECORDING_SESSION_LABEL' not found >

Any idea of what is going on here? Thanks!

Upvotes: 0

Views: 98

Answers (1)

arg0naut91
arg0naut91

Reputation: 14774

As explained, you're not referring to your data frame in the gather statement.

However, you could avoid the need for referring to it altogether and put the second part in a dplyr pipeline, like below:

library(dplyr)
library(tidyr)

data_IA_DWELL_TIME <- spread(data_IA_DWELL_TIME, key = IA_LABEL, value = IA_DWELL_TIME) 

data_IA_DWELL_TIME %>%
  mutate_at(
    vars(eyes, nose, mouth, face),
    ~ 100 * (. / (rowSums(data_IA_DWELL_TIME[, c("eyes", "nose", "mouth", "face")])))
  ) %>%
  gather(key = IA_LABEL, value = IA_DWELL_TIME,-RECORDING_SESSION_LABEL,-condition, -TRIAL_INDEX)

Upvotes: 1

Related Questions