【问题标题】:create a new column which holds values of another column plus NA values from a third column创建一个新列,其中包含另一列的值加上第三列的 NA 值
【发布时间】:2017-04-09 14:44:50
【问题描述】:

我有格式的时间序列数据

            Time   Size Ask    Bid    Trade
11-1-2016   9:00:12 100 <NA>    901     <NA>
11-1-2016   9:00:21 5   <NA>    <NA>    950
11-1-2016   9:00:21 5   <NA>    950     <NA>
11-1-2016   9:00:21 10  905     <NA>    <NA>
11-1-2016   9:00:24 500 <NA>    921     <NA>
11-1-2016   9:00:28 2   <NA>    879     <NA>
11-1-2016   9:00:31 6   1040    <NA>    <NA>
11-1-2016   9:00:39 5   <NA>    <NA>    950
11-1-2016   9:00:39 5   <NA>    950     <NA>
11-1-2016   9:00:39 10  905     <NA>    <NA>

而数据的结构是

'data.frame':   35797 obs. of  5 variables:
 $ Time : POSIXct, format: "2016-11-01 09:00:12" "2016-11-01 09:00:21" ..
 $ Size : chr  "100" "5" "5" "10" ...
 $ ASk  : chr  NA NA NA "905" ...
 $ Bid  : chr  "901" NA "950" NA ...
 $ Trade: chr  NA "950" NA NA ...

现在我想要另一个名为“Ask_Size”的列,它将为“Ask”列中的每个数据从“Size”列获取数据。如果 Ask 中 Column 中的数据为“NA”,则“Ask_Size”列中的相应值也将为“NA”

【问题讨论】:

    标签: r time-series portfolio quantitative-finance


    【解决方案1】:

    这里有两种方法可以做到这一点。首先找到非 NA 值并将 Size 列与此向量相乘。如果存在 NA,则结果将为 0。将零更改为 NA。

    xy <- data.frame(a = 1:3, b = c(NA, 3, 1))
    
    xy$c <- xy$a * !is.na(xy$b)
    xy[xy$c == 0, "c"] <- NA
    xy
    
      a  b  c
    1 1 NA NA
    2 2  3  2
    3 3  1  3
    

    或者,您可以复制 Size 并将 Ask 为 NA 的所有值更改为 NA。

    xy$c <- xy$a
    xy[is.na(xy$b), "c"] <- NA
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 2021-07-05
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多