Как создать новый столбец со значениями, которые зависят от значений в других столбцах? - PullRequest
0 голосов
/ 24 января 2020

Вот очень простой игрушечный набор данных, чтобы проиллюстрировать проблему, с которой я в настоящее время сталкиваюсь с другим набором данных.

Предположим, мы протестировали 4 участника математического теста, где каждый из них ответил на 4 вопроса. 2 из этих вопросов были легкими, и 2 из них были трудными. Но вопросы были представлены в случайном порядке, поэтому некоторые люди начали с простого вопроса, а некоторые начали с трудного вопроса. И у нас есть бинарная переменная ответа в этом эксперименте, где мы классифицировали ответы как «правильные» или «неправильные».

Вот фиктивные данные:

my_matrix <- matrix(c(rep(1:4, each=4), rep(1:4, 4), rep(c("difficult", "easy"), times = 4), rep(c("easy", "difficult"), times = 4), rep(c("correct", "incorrect"), times = 8)), nrow=16, ncol=4, byrow = FALSE)

my_matrix

my_data_frame <- as.data.frame(my_matrix)

colnames(my_data_frame) <- c("Participant", "ItemNumber", "QuestionDifficulty", "Answer")

my_data_frame$Participant <- as.numeric(my_data_frame$Participant)

my_data_frame

Теперь я хочу создать новый столбец так, чтобы его значение было «DifficultFirst» для людей, которые начали с трудного вопроса и «EasyFirst» для людей, которые начали с простого вопроса. Я попробовал следующий код для этого.

for (i in 1:16) {
  ifelse(my_data_frame$Participant == i & my_data_frame$ItemNumber == 1 & my_data_frame$QuestionDifficulty =="difficult",
         my_data_frame$FirstQuestion[((i*4)-3):(i*4)] <- "DifficultFirst",
         my_data_frame$FirstQuestion[((i*4)-3):(i*4)] <- "EasyFirst")}

Но это не сработало. В частности, я получил сообщение об ошибке о замене и несоответствии данных с точки зрения номеров строк, и я не знаю, почему это так.

Уже поздно, и мой мозг может быть слишком уставшим, поэтому извиняюсь, если это глупый вопрос. Но любая помощь будет оценена. Спасибо!

1 Ответ

1 голос
/ 24 января 2020

Вам не нужно все oop, вы можете использовать различные операции группировки. Это упорядочивает данные по Participant и ItemNumber, группирует их по Participant и получает первое значение QuestionDifficulty.

library(dplyr)

my_data_frame %>%
  arrange(Participant, ItemNumber) %>%
  group_by(Participant) %>%
  mutate(FirstQuestion = paste0(first(QuestionDifficulty), "first"))

#   Participant ItemNumber QuestionDifficulty Answer    FirstQuestion 
#         <dbl> <fct>      <fct>              <fct>     <chr>         
# 1           1 1          difficult          correct   difficultfirst
# 2           1 2          easy               incorrect difficultfirst
# 3           1 3          difficult          correct   difficultfirst
# 4           1 4          easy               incorrect difficultfirst
# 5           2 1          difficult          correct   difficultfirst
# 6           2 2          easy               incorrect difficultfirst
# 7           2 3          difficult          correct   difficultfirst
# 8           2 4          easy               incorrect difficultfirst
# 9           3 1          easy               correct   easyfirst     
#10           3 2          difficult          incorrect easyfirst     
#11           3 3          easy               correct   easyfirst     
#12           3 4          difficult          incorrect easyfirst     
#13           4 1          easy               correct   easyfirst     
#14           4 2          difficult          incorrect easyfirst     
#15           4 3          easy               correct   easyfirst     
#16           4 4          difficult          incorrect easyfirst
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...