-1

我有一个数据框,deflator.

我想获得一个新的数据框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 ))} 

我想我可能做错了。

4

2 回答 2

2

为什么要使用数据框?这是一个简单的向量运算。

inflation = 100 * (deflator[1:67] -  deflator[-(1:4)])/deflator[-(1:4)]
于 2012-05-29T08:14:30.657 回答
1

我同意@Fhnuzoag 您的示例建议对数字向量而不是数据框进行计算。这是利用函数lag中的参数进行计算的另一种方法diff(索引与您的问题中的索引匹配):

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
于 2012-05-29T10:04:57.580 回答