Как сравнить с «контрольной датой», затем заполнить недостающие данные в R? - PullRequest
0 голосов
/ 14 ноября 2018

Еще два вопроса на эту тему: A B

Сначала позвольте мне показать пример данных (Данные A и B):

(1) Данные A:

Date_Collected  A_Value
01/04/2016 10:53    0.137
01/20/2016 13:13    0.204
01/25/2016 11:09    0.199
02/01/2016 12:55    0.441
02/01/2016 12:56    0.215
02/01/2016 13:11    0.397
02/03/2016 09:19    0.377
02/10/2016 08:11    1.45
02/15/2016 13:04    2.63

(2) Данные B:

Date_Collected  B_Value
01/04/2016 10:53    0.108
01/20/2016 13:13    0.404
02/01/2016 13:11    0.594
02/15/2016 13:04    1.99

Во-вторых, я расскажу, что я хочу сделать с R. Вы можете видеть, что «Данные A» имеют 9 записей, в то время как «Данные B» имеют только 4 записи. Поскольку эти значения так ценны, я не буду удалять «Данные А», чтобы соответствовать строкам «Данные Б». Вместо этого я буду заполнять «пропущенные» данные в «Данные B». Вещи, которые нужно сделать, можно разделить на две части:

(часть Ⅰ) Blank добавить пустые строки для «данных B» в соответствующем месте, в соответствии с «данными A»; ② В этих пустых строках (синий на Рис.1) скопируйте соответствующую дату. Результат в конце части like похож на рис.1.

(часть Ⅱ) Для интерполяции недостающих данных в «B_Value». Эта часть была решена. Вы можете увидеть решение в здесь Переполнения стека.

Может ли кто-нибудь дать мне совет по этому поводу (особенно Часть Ⅰ)? Спасибо.

Fig-1

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Использование слияние :

# data stolen from @AntoniosK's post
dt_A = data.frame(Date = c("01/04/2016 10:53", "02/04/2016 10:54", "03/04/2016 10:55"),
                  A_Value = c(5,6,7))

dt_B = data.frame(Date = c("01/04/2016 10:53", "03/04/2016 10:55"),
                  B_Value = c(1,3))

# keep dates as date
dt_A$Date <- as.POSIXct(dt_A$Date, format="%m/%d/%Y %H:%M")
dt_B$Date <- as.POSIXct(dt_B$Date, format="%m/%d/%Y %H:%M")

# then merge and sort on date
res <- merge(dt_B, dt_A[, "Date", drop  = FALSE], all.y = TRUE)
res <- res[ order(res$Date), ]
res
#                  Date B_Value
# 1 2016-01-04 10:53:00       1
# 2 2016-02-04 10:54:00      NA
# 3 2016-03-04 10:55:00       3
0 голосов
/ 14 ноября 2018
library(tidyverse)

# example data
dt_A = data.frame(Date = c("01/04/2016 10:53", "02/04/2016 10:54", "03/04/2016 10:55"),
                  A_Value = c(5,6,7))

dt_B = data.frame(Date = c("01/04/2016 10:53", "03/04/2016 10:55"),
                  B_Value = c(1,3))

# complete dates of data B using dates of data A
dt_B %>% complete(Date = dt_A$Date)


# # A tibble: 3 x 2
#   Date             B_Value
#   <chr>              <dbl>
# 1 01/04/2016 10:53       1
# 2 02/04/2016 10:54      NA
# 3 03/04/2016 10:55       3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...