Невозможно просмотреть значения подмножества векторов в R - PullRequest
0 голосов
/ 26 апреля 2018

Прошу прощения, если вопрос действительно простой, я все еще новичок с 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 #.

В любом случае, если бы иногда можно было объяснить мне, почему это не работает, и показать мне лучший способ сделать это, это действительно сделало бы мой день!

1 Ответ

0 голосов
/ 26 апреля 2018
set.seed(123)
df <- as.data.frame(matrix(sample(c(0:10), 60, TRUE), ncol = 6))
colnames(df) <- wrapr::qc(average_satisfaction_march, average_satisfaction_april, 
               average_satisfaction_may, average_satisfaction_june, 
               average_satisfaction_july, average_satisfaction_august)

df$donnees <- c(1:10)
df <- df[,c(7,1:6)] 

df$timesanswered <- apply(df[,2:7], 1 , function(x) {length(x[x>0])})

Сначала я создал несколько образцов данных. Последняя строка - это код для подсчета времени, в течение которого удовлетворенность донни не равна нулю за месяц. Я предположил, что, как вы описали свои данные, у вас нет пропущенных значений, но нули заполняются, когда донни не ответил на вопрос?

Вы можете заменить 2 и 7 номерами столбцов Average_satisfaction_march и average_satisfaction_august соответственно. Для этого не нужно создавать отдельный фрейм данных.

...