2012-05-29 87 views
-1

我有一個數據幀,deflatorR:在數據幀上使用for循環

我想它可以計算一個新的數據幀inflation

deflator[i] - deflator[i-4] 
----------------------------- * 100 
     deflator [i - 4] 

數據幀deflator有71個數字:

> deflator 
[1] 0.9628929 0.9596746 0.9747274 0.9832532 0.9851884 
[6] 0.9797770 0.9913502 1.0100561 1.0176906 1.0092516 
[11] 1.0185932 1.0241043 1.0197975 1.0174097 1.0297328 
[16] 1.0297071 1.0313232 1.0244618 1.0347808 1.0480411 
[21] 1.0322142 1.0351968 1.0403264 1.0447121 1.0504402 
[26] 1.0487097 1.0664664 1.0935239 1.0965951 1.1141851 
[31] 1.1033155 1.1234482 1.1333870 1.1188136 1.1336276 
[36] 1.1096461 1.1226584 1.1287245 1.1529588 1.1582911 
[41] 1.1691221 1.1782178 1.1946234 1.1963453 1.1939922 
[46] 1.2118189 1.2227960 1.2140535 1.2228828 1.2314258 
[51] 1.2570788 1.2572214 1.2607763 1.2744415 1.2982076 
[56] 1.3318808 1.3394186 1.3525902 1.3352815 1.3492751 
[61] 1.3593859 1.3368135 1.3642940 1.3538567 1.3658135 
[66] 1.3710932 1.3888638 1.4262185 1.4309707 1.4328823 
[71] 1.4497201 

這對我來說是一個非常棘手的問題。 我試圖做到這一點使用一個for循環:

> d <- data.frame(deflator) 
> for (i in 1:71) {d <-rbind(d,c(delfaotr))} 

我想我可能是做錯了。

+0

如果「循環「功能不適合它,我該怎麼做? 被困在這個問題上幾個小時.. :( – user1422878

回答

2

爲什麼要使用數據框?這是一個簡單的矢量操作。

inflation = 100 * (deflator[1:67] - deflator[-(1:4)])/deflator[-(1:4)] 
1

我@Fhnuzoag同意你的例子說明上的數字矢量,而不是一個數據幀計算。這裏有一個附加的方式做你的計算中diff功能服用lag參數的優勢(與匹配,那些在你的問題索引):

lagBy <- 4 # The number of indexes by which to lag 

laggedDiff <- diff(deflator, lag = lagBy) # The numerator above 

theDenom <- deflator[seq_len(length(deflator) - lagBy)] # The denominator above 

inflation <- laggedDiff/theDenom 

的前幾個結果:

head(inflation) 
# [1] 0.02315470 0.02094710 0.01705379 0.02725941 0.03299085 0.03008297