【问题标题】:RSQlite: grabbing data from a table, given values in anotherRSQlite:从表中获取数据,给定另一个表中的值
【发布时间】:2020-02-21 06:37:01
【问题描述】:

假设我有两张桌子,A 和 B。

Table A
X  Y  Z
1  2  3
4  5  6
7  8  9

Table B
W  X  Y
3  1  4
4  4  5
7  5  9

我已经确定表 A 的 X 值 1 和 4 很有趣,因为 Z 发生了什么(它们小于 8 或其他)。在表 B 中,我想选择 X 值为 1 和 4 的 W 列值。

我对两种方法持开放态度。

  1. 使用我碰巧从 RSQLite 函数调用的 SQL 命令执行所有操作

  2. 使用 R 形成数据框。

由于我对 R 相当了解,而对 SQL 一无所知,所以我一直在追求方法 #2。我可以轻松地选择 X=1 和 X=4 的 X 和 Z 列并制作一个数据框。

没有奏效的是,当我尝试在表 B 中查找 X=1 和 X=4 时,如果我将值输入dbGetQuery,一切正常。

但是,我有很多价值观,无法全部手动完成。 dbGetQuery 不允许我在将表 A 中的值称为 ...WHERE "X" = str(data.frame(A)[1:2,1]) 时传递它们。我得到的错误似乎认为我正在寻找名为“1”而不是“X”的列。

【问题讨论】:

标签: r database sqlite sqldf rsqlite


【解决方案1】:

在纯 sql 中,这是两个表的直接连接,只过滤您关心的 a.z 值:

SELECT b.w FROM b JOIN a ON b.x = a.x WHERE a.z < 8;
w
----------
3
4

【讨论】:

    【解决方案2】:
    library(dplyr)
    
    Table_A %>% 
      filter(Z < 8) %>% 
      inner_join(., Table_B, by="X", suffix=c(".A",".B")) %>% 
      select(W)
    
    #>   W
    #> 1 3
    #> 2 4
    

    【讨论】:

      【解决方案3】:
      sqlite> .headers on
      sqlite> select W from B where X in (select X from A where Z < 9);
      W
      3
      4 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 2016-05-16
        • 2019-05-02
        • 1970-01-01
        • 2020-03-24
        • 1970-01-01
        • 2020-04-14
        相关资源
        最近更新 更多