我正在尝试获取单个变量的均值矩阵(最终绘制时间序列),并在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的矩阵。
答案 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")