【问题标题】:Adding NA's to a vector将 NA 添加到向量中
【发布时间】:2016-02-05 01:52:03
【问题描述】:

假设我有一个价格向量:

foo <- c(102.25,102.87,102.25,100.87,103.44,103.87,103.00)

我想获取 x 个周期前的百分比变化,例如,将其存储到另一个向量中,我将其称为 log_returns。我无法将向量 foo 和 log_returns 绑定到 data.frame 中,因为向量的长度不同。所以我希望能够将 NA 附加到 log_returns 中,这样我就可以将它们放在 data.frame 中。我想出了一种在向量末尾附加 NA 的方法:

log_returns <- append((diff(log(foo), lag = 1)),NA,after=length(foo)) 

但这只有在我查看前 1 个时期的百分比变化时才有帮助。无论我投入多少滞后,我都在寻找一种方法来填充 NA,以便百分比变化向量的长度等于 foo 向量

任何帮助将不胜感激!

【问题讨论】:

  • 您可以改为存储在列表中
  • 下面的答案很好,但更一般地说,如果你有一个不等长向量列表,你可以做类似l &lt;- list(1, 1:2, 1:5); data.frame(lapply(l, `length&lt;-`, max(lengths(l))))

标签: r


【解决方案1】:

您可以使用自己的 diff 修改:

mydiff <- function(data, diff){
  c(diff(data, lag = diff), rep(NA, diff))
}

mydiff(foo, 1)
[1]  0.62 -0.62 -1.38  2.57  0.43 -0.87    NA

data.frame(foo = foo,  diff = mydiff(foo, 3))

     foo  diff
1 102.25 -1.38
2 102.87  0.57
3 102.25  1.62
4 100.87  2.13
5 103.44    NA
6 103.87    NA
7 103.00    NA

【讨论】:

    【解决方案2】:

    假设您有一个以矩阵形式排列的数字 1 到 10 的数组,其中 该矩阵包含来自 5 行 2 列和第 2 列的元素,将被分配 NA ,# 然后制作一个 5*2 的元素矩阵 1:10

    Array_test=array(c(1:10),dim=c(5,2,1)) 
    Array_test
    Array_test[ ,2, ]=c(NA)# Defining 2nd column to get NA
    Array_test
    # Similarly to make only one element of the entire matrix be NA 
    # let's say 4nd-row 2nd column to be made NA then
    Array_test[4 ,2, ]=c(NA)
    

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 2013-09-29
      • 2019-10-07
      • 2012-04-27
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多