как исправить зацикливание переменной по дням для уникального пользователя - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь получить матрицу средних значений (чтобы в конечном итоге построить временной ряд) для отдельной переменной, зацикленной в течение 14 дней (в каждый уникальный день, уникальный пользователь мог бы поместить максимум 5 значений для указанной переменной).

Я пытался создать цикл с отдельными временными значениями, но продолжаю запускать либо «сценарий вне границ» (несмотря на достаточное количество столбцов), либо «аргумент не является числовым или логическим: возвращая ошибки NA '.

Совершенно новый для R, так что это сильно меня напрягает.

В нем 41 участник с до 5 записанными значениями по 8 различным переменным (у некоторых меньше,эти значения записываются как пропущенные)

mat_varday <- matrix(nrow=nrow(as.data.frame(unique(data$ID))), ncol=14, NA) 

for(i in 1:41)  {                # loop through participants
  temp <- filter(data, ID == unique(data$ID)[i])
  for(j in 1:nrow(as.data.frame(unique(data$dayvar)))) {   # loop through days
    temp1 <- filter(temp, dayvar == unique(data$dayvar)[j])
    mat_varday[i,j] <- mean(temp1[,2], na.rm = TRUE)    
  }
}  

# plot time series
plot(colMeans(mat_varday, na.rm = TRUE), type="b", ylim=c(0,5),
     xlab="days", ylab="Total mean of boredom for all people")

Я ожидаю получить матрицу со средней оценкой переменной 2 на пользователя в день.

1 Ответ

0 голосов
/ 09 мая 2019

Рассмотрим aggregate для нескольких групп. Обязательно переименуйте variable2

agg_df <- aggregate(variable2 ~ ID + dayvar, data, FUN=mean)
agg_df

А для построения графика рассмотрим tapply для построения необходимой матрицы:

mat_varday <- with(data, tapply(variable2, list(dayvar, ID), FUN=mean))
mat_varday

plot(colMeans(mat_varday, na.rm = TRUE), type="b", ylim=c(0,5),
     xlab="days", ylab="Total mean of boredom for all people")
...