编辑以包含向量
BaseSal <- c(22745,23606,24761,25873,27097,28533,30153,31813,
33588,35492,37524,39630,41935,44346,46855,49483,
52260,55222,58211,61194,64441,67900,71493,75299,
79455,83641,88169,92811,97673,102780,108257,114015,
120216,126620,133184,139879,147219,137346);
AnnualInc <- c(678,703,730,762,815,843,876,907,939,981,1045,1081,
1125,1201,1245,1293,1355,1327,1382,1440,1503,1566,
1631,1694,1766,1838,1935,2010,2088,2164,2245,2321,
2397,2480,2560,2648,2731,1);
我的以下代码具有Vector BaseSal和38个不同位置的基本工资,以及Vector AnnualInc,它是38个职位中每个职位的基本工资增加的年度金额。这段代码完美无缺:
for (i in 1:38)
print(BaseSal[i]+(AnnualInc[i] * 0:10));
0:10响铃的原因是0是第一年的工资,每年增加10年的年增量。
我真的很惊讶到达到那里我没有多少工作要做。我已经阅读了一些关于应用更好用于R的内容,我将其部分用于申请。如果第一年的年度增长适用于基本工资,我得到的结果就是我的价值。这是我用来实现的代码:
l<-matrix(BaseSal,38,11,FALSE);
apply(l,2,function(z) z+(AnnualInc));
任何人都可以帮我弄清楚如何使用矩阵迭代每年的增量并申请,包括将第一年留作基本薪水吗?
答案 0 :(得分:0)
使用apply
即可:
set.seed(48)
baseSal <- rnorm(38, 100, 5)
annInc <- rnorm(38, 10, 1)
mydf <- data.frame(baseSal, annInc)
class(mydf)
[1] "data.frame"
head(mydf)
baseSal annInc
1 100.99880 9.895188
2 86.09930 8.874881
3 96.52124 10.909675
4 110.37700 12.670161
5 103.95111 10.248833
6 102.44925 8.058972
res <- apply(mydf, 1, function(x) {x[1] + x[2] * 0:10})
基本上将两个向量合并到一个对象,即data.frame
,然后为每一行计算你想要的。
您将获得一个10x38矩阵,其中每列是“进展”,每行是“年”
答案 1 :(得分:0)
以下内容将返回您从原始for
循环获得的相同值。正如您所看到的,在这种情况下,与for
循环的表示法非常类似。
lapply(1:38, function(i){
BaseSal[i]+(AnnualInc[i] * 0:10)
})
请注意,lapply
会返回一个列表,您可以使用sapply
并返回matix。
答案 2 :(得分:0)
您可以创建适当尺寸的矩阵并使用逐元素矩阵运算:
m <- l + AnnualInc * (col(l) - 1)
head(m)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 22745 23423 24101 24779 25457 26135 26813 27491 28169 28847 29525
## [2,] 23606 24309 25012 25715 26418 27121 27824 28527 29230 29933 30636
## [3,] 24761 25491 26221 26951 27681 28411 29141 29871 30601 31331 32061
## [4,] 25873 26635 27397 28159 28921 29683 30445 31207 31969 32731 33493
## [5,] 27097 27912 28727 29542 30357 31172 31987 32802 33617 34432 35247
## [6,] 28533 29376 30219 31062 31905 32748 33591 34434 35277 36120 36963