如何为唯一用户修复几天循环的变量

时间:2019-05-08 19:18:33

标签: r loops time-series

我正在尝试获取单个变量的均值矩阵(最终绘制时间序列),并在14天之内循环(在每个唯一的一天中,一个唯一的用户最多可以为该变量输入5个值)。

我尝试创建具有单独温度的循环,但是继续运行“脚本超出范围”(尽管列数足够)或“参数不是数字或逻辑:返回NA”错误

R完全陌生,所以这让我压力很大。

有41位参与者在8个不同的变量上记录了多达5个值(有些记录较少,这些值记录为缺失)

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 :(得分:0)

考虑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")