добавить столбец data.frame с помощью справочной таблицы и линейной интерполяции - PullRequest
0 голосов
/ 26 ноября 2018

Я уверен, что это очень распространенный метод, но у меня возникают проблемы с его точным изложением.У меня есть длинный data.frame с тремя столбцами: столбец date_time, числовой столбец (df$property1) и строковый столбец.

У меня есть еще один data.frame, выступающий в качестве справочной таблицы, обеспечивающей связь между"property1" и другое числовое свойство, "property2".

Я хотел бы добавить столбец df$property2 к df, который является приблизительным результатом использования линейной интерполяции df$property1 на основе отношения property1 и property2 таблицы поиска.Например, если df$property1 окажется равным 10, df$property2 будет равно 20, или если df$property1 окажется равным 145, df$property2 будет где-то ниже, но довольно близко к 1500.

IЯ надеюсь научиться создавать df$property2 эффективно и заинтересован в изучении tidyverse и не-тидиверс методов.

library(tidyverse)

# create example data frame needing new column
date_time <- seq(from=as.POSIXct("2015-12-10 12:00", tz="GMT"), 
to=as.POSIXct("2015-12-10 18:00", tz="GMT"), by="1 hours") 
property1 <- c(1,45,12,99, 105,3,149)
df1 <- data.frame(date_time, property1) %>% mutate(class = "a")
property1 <- c(50,10,66,147, 11,190,80)
df2 <- data.frame(date_time, property1) %>% mutate(class = "b")
df <- rbind(df1, df2)

# create example look up table
property1_lookup <- c(1,     10, 15, 50,  100, 150,  99999)
property2_lookup <- c(0.001, 20, 30, 100, 500, 1500, 1501)
lookup <- data.frame(property1_lookup, property2_lookup)

Спасибо.

1 Ответ

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

Я думаю, что это довольно просто:

df$property2 = approx(x = lookup$property1_lookup,
                      y = lookup$property2_lookup,
                      xout = df$property1)$y
head(df)
#             date_time property1 class  property2
# 1 2015-12-10 12:00:00         1     a   0.001000
# 2 2015-12-10 13:00:00        45     a  90.000000
# 3 2015-12-10 14:00:00        12     a  24.000000
# 4 2015-12-10 15:00:00        99     a 492.000000
# 5 2015-12-10 16:00:00       105     a 600.000000
# 6 2015-12-10 17:00:00         3     a   4.445222

Я оставлю вам вопрос, подходит ли линейная интерполяция ... по вашим данным логарифмическая интерполяция может быть лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...