У меня есть набор данных с ответами на шкалу Лайкерта и временем реакции, которые являются результатами экспериментальных манипуляций. В идеале я хотел бы скопировать значения Likert_Answer и привести их в соответствие с экспериментальными манипуляциями, связанными с этим значением.
Набор данных выглядит следующим образом:
x <- rep(c(NA, round(runif(5, min=0, max=100), 2)), times=3)
myDF <- data.frame(ID = rep(c(1,2,3), each=6),
Condition = rep(c("A","B"), each=3, times=3),
Type_of_Task = rep(c("Test", rep(c("Experiment"), times=2)), times=6),
Likert_Answer = c(5, NA, NA, 6, NA, NA, 1, NA, NA, 5, NA, NA, 5, NA, NA, 1, NA, NA),
Reaction_Times = x)
Мне очень сложно сформулировать проблему, которая у меня есть, поэтому мой ожидаемый результат должен выглядеть так:
myDF_Output <- data.frame(ID = rep(c(1,2,3), each=6),
Condition = rep(c("A","B"), each=3, times=3),
Type_of_Task = rep(c("Test", rep(c("Experiment"), times=2)), times=6),
Likert_Answer = rep(c(5, 6, 1, 5, 5, 1), each = 3),
Reaction_Times = x)
Я видел в этот пост возможное решение, которое заключается в следующем:
library(dplyr)
library(tidyr)
myDF2 <- myDF %>%
group_by(ID) %>%
fill(Likert_Answer) %>%
fill(Likert_Answer, .direction = "up")
Проблема в том, что это решение справедливо до тех пор, пока человек отвечает шкале Лайкерта. Если бы это было не так, я боюсь, что это решение затянет результат шкалы Лайкерта предыдущего экспериментального условия. Например:
myDF_missing <- myDF
myDF_missing[4,4] = NA
myDF3 <- myDF_missing %>%
group_by(ID) %>%
fill(Likert_Answer) %>%
fill(Likert_Answer, .direction = "up")
В этом случае то, что должно было быть NA в Likert_Scales для всех значений в условии B для ID 1, стало 5. Есть идеи, как этого избежать?
(Извините, если код грязный: я новичок в R, и я усердно учусь... Но на этом этапе я довольно застрял с этой проблемой.)