sql - 使用 RSQLite 在 r 中直接使用 SQL 操作数据框
问题描述
我知道我可以每天简单地这样做,dplyr
但这里的重点是学习使用 SQL 创建和操作一个小型关系数据库。
Price
需要转成数值。删除“R”和中间的空格。coordinates
需要变成2个坐标Long
和Lat
floor size
需要从删除空格和末尾的“m^2”的字符串中转换为数字。
最小工作示例
# Data to copy into sheet
Price coordinates floor.size surburb date
R 1 750 000 -33.93082074573843, 18.857342125467635 68 m² Jhb 2021-06-24
R 1 250 000 -33.930077157927855, 18.85420954236195 56 m² Jhb 2021-06-17
R 2 520 000 -33.92954929205658, 18.857504799977896 62 m² Jhb 2021-06-24
在 R markdown 中操作的代码
```{r}
#install.packages("RSQLite", repos = "http://cran.us.r-project.org")
library(readxl)
library(dplyr)
library(RSQLite)
library(DBI)
library(knitr)
db <- dbConnect(RSQLite::SQLite(), ":memory:")
knitr::opts_chunk$set(echo = TRUE)
knitr::opts_chunk$set(connection = "db")
# Import data
dataH <- read_excel("C:/Users/Dell/Desktop/exampledata.xlsx")
```
```{sql, connection = db}
# SQL code passed directly
```
编辑1:
@Onyambu 的答案几乎有效。它正在产生坐标错误。例如,在下面的图像中,最后两个坐标应该以“-33.930989501123, 18.857270308516927”Long
而不是“.85 ”开头。coordinate
我将如何解决这个问题?
解决方案
使用基本的 sql 函数,您可以执行以下操作:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,connection = "db")
```
```{r}
db <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
txt <- "Price coordinates floor.size surburb date\n
'R 1 750 000' '-33.93082074573843, 18.857342125467635' '68 m²' Jhb 2021-06-24\n
'R 1 250 000' '-33.930077157927855, 18.85420954236195' '56 m²' Jhb 2021-06-17\n
'R 2 520 000' '-33.92954929205658, 18.857504799977896' '62 m²' Jhb 2021-06-24"
dataH <- read.table(text = txt, header = TRUE)
DBI::dbWriteTable(db, 'dataH', dataH)
```
```{sql}
SELECT REPLACE(SUBSTRING(price, 3, 100), ' ', '') price,
replace(SUBSTRING(coordinates, 1, 20), ',', '') Lat,
SUBSTRING(coordinates, 21, 255) Long,
SUBSTRING(`floor.size`, 1, 2) floor_size,
surburb,
date
FROM dataH
```
推荐阅读
- javascript - 有没有一种简单的方法来合并对象并将它们的 int 属性求和,而不是在 javascript es2018 中覆盖?
- excel - Excel 数据透视表新字段的默认选项 - 如何从计数更改为总和
- c# - 如何在按钮宽度中使用多重绑定
- regex - 在 ruby 中使用多个正则表达式过滤文本文件
- node.js - 为什么从 S3 流创建的文件是空的?
- python - Django:当数据库关闭/无法连接时如何处理异常?
- java - 如何使用zuul将响应体提取到后过滤器中
- batch-file - 无法使用批处理文件在 atom 中完全自动化创建和打开 p5.js 项目
- javascript - 如何调整 css div 表以使多行文本很好地适合?
- sql - 在 SQL 查询中反转条件