我正在处理一个问题,该数据集包含美国所有州的每月失业率数据,我必须使用前4个月的平均值来计算每个特定月份的失业率。
我的数据集是“原始”数据,是一个50x416的矩阵,其中的行代表状态,而列则代表月份和数据。我不得不删除最后50列,因为它们将在以后用作测试数据。
我试图创建一个for
循环,在该循环中我将使用rowMeans
计算特定月份中每个州的均值。但是,当我尝试运行for
循环时,出现以下错误:
'x'必须是至少二维的数组。
我已经在论坛上阅读了一些主题,这些主题指出必须将数据转换为data.frame
并添加drop=FALSE
才能保持尺寸,但是它们似乎都不起作用。
naiveds = rawt[, 1:366] #dataset
naiveds = data.frame(naiveds) #convert to dataframe
naiveavg = matrix(1, nrow = 50, ncol = 362) #create matrix with averages
naiveavg = data.frame(naiveavg) #convert to dataframe
for (i in 1:362) {
naiveavg[, i] = rowMeans(naiveds[, i:i + 3], drop=FALSE)
}
谁知道答案?将不胜感激!
谢谢, RS
答案 0 :(得分:0)
答案转到OP。
冒号(:
)运算符比加法(+
)运算符具有更高的优先级。因此,对于a:b + c
,首先创建一个从a
到b
的整数向量,然后将c
添加到向量的每个元素。在a:(b + c)
的情况下,创建了一个从a
到b + c
的整数矢量。请参见下面的代码:
# simulation
rawt <- matrix(abs(rnorm(416 * 50)), ncol = 416)
# OP code
naiveds = rawt[, 1:366] #dataset
naiveds = data.frame(naiveds) #convert to dataframe
naiveavg = matrix(1, nrow = 50, ncol = 362) #create matrix with averages
naiveavg = data.frame(naiveavg) #convert to dataframe
for (i in 1:362) {
naiveavg[, i] = rowMeans(naiveds[, i:(i + 3)])
}
head(naiveavg[, 1:10])
输出:
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 1.0236264 1.1506134 0.6025684 0.4575390 0.4129575 0.4811697 0.4954972 0.5351069 0.8029415 0.7665286
2 0.5774167 0.9121022 0.8317297 1.1379453 1.2495575 0.9101162 1.0112815 0.7755866 0.9265676 1.1548026
3 0.7873192 1.1368723 1.1991596 1.1315374 0.9370383 0.5907627 0.7075796 0.9077979 0.8636132 0.9696761
4 0.7503767 0.7663302 0.9274636 0.8134924 0.8519011 1.1361044 1.0493983 1.1042020 0.8107891 0.5100895
5 0.9922414 0.8016487 0.6029256 0.6690121 0.5263644 0.3952237 0.5052323 0.2087226 0.2059480 0.5512362
6 0.9643362 0.8513484 1.0880347 0.8930363 1.0125207 1.1518902 0.9922219 1.1322379 0.9680500 1.1018722
NB。我建议您仔细考虑一下失业率均值的计算公式。通常,不知道一个州的总人口是无法计算费率的平均值的。仅在州人口不随月份变化的情况下才有可能。