sql - 使用 SQL 样式的 INSERT 创建逐行数据框以提高易读性
问题描述
我在脚本中有一些参考表,其中一些值偶尔会手动更新。
使用通常的按列数据框定义,在较大的表中识别要更改的正确索引可能会变得很麻烦:例如,在每列中查找要更改的第 15 个值。
虽然我知道这些可以在外部定义(例如csv),但我想知道它们是否可以更容易地直接在脚本中定义,以便为其他用户提供最大的可见性。
使用按列data.frame
创建的简短示例:
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())
)
如何在sql中实现这一点(我认为最清晰易读):
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)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) Base R仅使用 base 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)
推荐阅读
- flutter - Flutter - 您将如何检查您从哪个屏幕单击了底部导航选项卡
- python - 在 SSIS 中执行 Python 脚本,该脚本使用 SSIS 生成的数据
- scala - 在 IntelliJ 的外部 Spark 3.0.1 集群上运行
- html - 带有破折号的属性名称不适用于 get_attribute (perl Selenium)
- qt - 使用 QSCreen::grabWindow() 函数在 qt 中进行窗口预览
- c# - 如何处理从 web 应用程序到 SQL 数据库的无效登录详细信息
- azure-devops - 切换到私有规模集代理后,代码覆盖率报告不再正确
- windows - 批量从文本文件中提取 URL
- ibm-mq - 如何记录 WebSphere MQ 消息
- android - 在 Edittext 上,对讲宣布已达到最大限制,即使未达到也是如此 当 maxLength 与 numberPassword 一起定义时会发生这种情况