Построение строк данных с использованием INSERT в стиле SQL для повышения удобочитаемости - PullRequest
0 голосов
/ 03 января 2019

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

При обычном столбцовом определении определение правильного индекса может стать затруднительнымизменить в больших таблицах: например, найти 15-е значение в каждом столбце для изменения.

Хотя я знаю, что они могут быть определены внешне (например, ), мне было интересно, если ониможет быть легко определено непосредственно в скрипте для максимальной видимости другим пользователям.


Краткий пример использования по столбцам data.frame creation:

data.frame(id = 1:3, 
           start = as.Date(c("2018-01-01", "2018-03-02", "2018-05-14")), 
           end = c(as.Date("2018-06-30"), Sys.Date(), Sys.Date()))

И использование строкмудрое создание data.frame, для которого все еще требуются явные имена переменных в каждом data.frame (в противном случае имена столбцов могут не совпадать с rbind):

rbind(
  data.frame(id = 1, start = as.Date("2018-01-01"), end = as.Date("2018-06-30")),
  data.frame(id = 2, start = as.Date("2018-03-02"), end = Sys.Date()),
  data.frame(id = 3, start = as.Date("2018-05-14"), end = Sys.Date())
)

Как этого можно достичь в (на мой взгляд, самая четкая разборчивость):

CREATE TABLE test (
  id int,
  start_date date,
  end_date date
);

INSERT INTO test
VALUES (1, '2018-01-01', '2018-06-30'),
       (2, '2018-03-02', SYSDATE),
       (3, '2018-05-14', SYSDATE);

Мне также было бы интересно узнать, является ли это плохой практикой в ​​целом, и просто хранить ли каждую ссылку.Лучше всего пойти в CSV.

1 Ответ

0 голосов
/ 03 января 2019

1) пакет sqldf Вы можете сделать это:

library(sqldf)

SYSDATE <- format(Sys.Date())
fn$sqldf("with test(id, start_date, end_date) as 
  (
     values
       (1, '2018-01-01', '2018-06-30'),
       (2, '2018-03-02', '$SYSDATE'),
       (3, '2018-05-14', '$SYSDATE')
  )
  select * from test")

2) пакет tibble Другая возможность:

library(tibble)

SYSDATE <- format(Sys.Date())
test <- tribble(
  ~id, ~start_date, ~end_date,
  1, '2018-01-01', '2018-06-30',
  2, '2018-03-02', SYSDATE,
  3, '2018-05-14', SYSDATE)

3) База R Используя только базу R, мы можем сделать:

Lines <- "
id start_date end_date  
1 2018-01-01 2018-06-30
2 2018-03-02 2019-01-03
3 2018-05-14 2019-01-03
"
read.table(text = Lines, header = TRUE, as.is = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...