2017-02-17 96 views
-2

編輯,包括向量從環路申請

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); 

這是我的第二天R中發展,所以請與我裸露/原諒任何天真。我的下面的代碼有38個不同職位的基本薪水矢量BaseSal,以及38個職位每年基本薪金每年增加的Vector AnnualInc。此代碼的工作完美:

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)); 

誰能幫我找出如何通過各年增量利用矩陣迭代和應用,包括留下第一年只是基本工資?

+5

你需要有足夠的數據進行編輯,以使這個問題[重複性(http://stackoverflow.com /問題/ 5963269 /如何對化妝一個偉大-R-重複性,例如/ 5963610#5963610)。 – alistaire

+0

@alistaire我添加了我的載體,是適合還是更需要? –

回答

0

以下將返回您從原始for循環獲得的相同值。正如你所看到的,在這種情況下,與for循環的符號很相似。

lapply(1:38, function(i){ 
    BaseSal[i]+(AnnualInc[i] * 0:10) 
}) 

注意lapply返回一個列表,你可以使用sapply並獲得MATIX回來。

+0

謝謝@ juan-bosco這個作品(包括lapply和sapply) - 我必須進一步研究這些。我想我在自己的教程上領先一點,並試圖做得比我所能做的更多。 –

+0

不用擔心,在我第一次遇到R時,對我來說應用程序很奇怪(我敢打賭很多)。檢查這個問題的其他答案,它們將幫助您進一步理解R如何處理您的操作試圖完成。 –

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的矩陣,其中每列是'進程',每一行是'年'

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 
+0

這就是我正在尋找的東西,這是一種引用矩陣中已有值的方法,謝謝。 –