2016-11-25 5 views
0

У меня есть временные ряды данных форматасоздать новый столбец, который хранит значения другого столбца плюс значения NA из третьей колонки

  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», который будет принимать данные из столбца «Размер» для каждого из данных в столбце «Спросить». Если данные в столбце «Спросить» являются «NA», то соответствующее значение в столбце «Ask_Size» также будет «NA»

ответ

0

Вот два способа сделать это. Сначала найдите значения не-NA и умножьте Colour 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 

Или вы можете скопировать размер и изменить все значения, где Ask - это NA к NA.

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

Большое спасибо Роман :) Это сработало – Abhishek