创建一个新列,其中包含另一列的值以及来自第三列的NA值

时间:2016-11-25 08:50:52

标签: r time-series portfolio quantitative-finance

我有格式

的时间序列数据
'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 ...

数据的结构是

       cp nvarchar(10)
       cDate date
       weight float

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

1 个答案:

答案 0 :(得分:0)

这有两种方法。首先找到非NA值并将Size colum与此向量相乘。如果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

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

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