Прошу прощения, если вопрос действительно простой, я все еще новичок с R.
В моем наборе данных наблюдения получены от людей, которых спрашивали, насколько они были удовлетворены по шкале от 1 до 10 каждый месяц в течение 6 месяцев.
Участие не было обязательным, поэтому иногда они отвечают, иногда нет.
Я пытаюсь создать переменную, которая подсчитывает, сколько раз они ответили на вопрос. Я считаю, что они отвечают, если ответ> 0.
Итак, сначала я выбрал релевантные переменные из своего набора данных и сохранил их в отдельном фрейме данных (не обращайте внимания на «среднее» в названии, для цели вопроса просто подумайте, что это их единственный ответ за месяц ):
monthly_sats <- select (donnees, average_satisfaction_march, average_satisfaction_april,
average_satisfaction_may, average_satisfaction_june,
average_satisfaction_july, average_satisfaction_august)
Затем я создал переменную, в которой я буду хранить, сколько раз (так, сколько месяцев) отвечал каждый человек, и я инициализировал ее как 0.
donnees$monthly_sat_count <- 0
Пока все хорошо. Затем я написал следующее:
for (i in monthly_sats) {
for(j in i) {
if (j > 0) {
donnees$monthly_sat_count <- donnees$monthly_sat_count + 1
}
}
}
Вот что я имел в виду:
для каждой переменной в фрейме данных month_sats
для каждого значения в этих переменных
если это значение больше 0, увеличьте переменную month_sat_count из набора данных «donnees» на 1.
Я ожидал, что для каждой строки в моем наборе данных month_sat_counts скажет, сколько из этих переменных было больше 0.
В результате каждая строка в month_sat_counts равна 365, и я понятия не имею, почему.
Обратите внимание, что я также пытался поднаборы вместо выбора, и результат точно такой же. Вот код:
for (i in donnees[c("average_satisfaction_march", "average_satisfaction_april",
"average_satisfaction_may", "average_satisfaction_june",
"average_satisfaction_july", "average_satisfaction_august")]) {
for(j in i) {
if (j > 0) {
donnees$monthly_sat_count <- donnees$monthly_sat_count + 1
}
}
}
И если я удаляю второй цикл for, просто циклически перебирая список векторов с приведенным ниже кодом, то month_sat_count всегда равен 0:
for (i in donnees[c("average_satisfaction_march", "average_satisfaction_april",
"average_satisfaction_may", "average_satisfaction_june",
"average_satisfaction_july", "average_satisfaction_august")]) {
if (i > 0) {
donnees$monthly_sat_count <- donnees$monthly_sat_count + 1
}
Я понятия не имею, почему это происходит, и я даже не знаю, с чего начать отладку, потому что у меня все еще есть проблемы с пониманием R. Некоторое время назад моим единственным опытом программирования был маленький C #.
В любом случае, если бы иногда можно было объяснить мне, почему это не работает, и показать мне лучший способ сделать это, это действительно сделало бы мой день!