与包含R中两个表(dataframes)的SELECT查询等价的是什么?

与包含R中两个表(dataframes)的SELECT查询等价的是什么?,r,sqlite,dataframe,R,Sqlite,Dataframe,在R中设置的我的sqldf默认使用SQLite。我尝试了以下查询,但未成功: query = "UPDATE t1 SET Actual = t2.AvgRevenue, Total = t2.AvgRevenue WHERE Name=t2.Name AND Pillar= 'HW' AND (Status <> 'Lost') AND Rev

在R中设置的我的sqldf默认使用SQLite。我尝试了以下查询,但未成功:

query =  "UPDATE t1
       SET Actual = t2.AvgRevenue,
           Total = t2.AvgRevenue
       WHERE  Name=t2.Name AND 
              Pillar= 'HW' AND
              (Status <> 'Lost') AND
              Revenue=0"

t1 = sqldf(c(query,"select * from pl0"))
query=“更新t1
设置实际值=t2.AvgRevenue,
总计=t2.AvgRevenue
其中Name=t2.Name和
支柱=‘HW’和
(状态为“丢失”)和
收入=0“
t1=sqldf(c(查询,“从pl0中选择*))
t1列有名称、支柱、状态、收入、实际值、总计 t2是一个列名为AvgRevenue的查找表

在做了一些研究之后,我发现SQLite目前不支持涉及两个或多个表的更新查询

我的问题是:我是否可以仅使用R来执行与上述查询等价的操作

为了得到答案,我尝试了以下方法:

test <- t1[t1$Revenue == 0 & t1$Status == 'Lost' & t1$Pillar == 'HW',]
test$Actual <- test$Name
mapvalues(test$Actual,
          t2$Name,
          t2$AvgRevenue,
          warn_missing = FALSE)
t1 <- test

test您可以使用dplyr库选择变量:

    library(dplyr)
    Actual <- select(t1, Name, Pillar, Status, Revenue)
    Avg_Revenue < select(t2, Name, AvgRevenue)

    complete_data = cbind(Actual, Avg_Revenue) 

希望能有所帮助

我根据R找到了我问题的答案。这里是:

t1 <- data.frame(Name=c("A","B","C","D"), 
                 Pillar=c("SW","HW","HW","SW"),
                 Status=c("Won","Open","Won","Lost"),
                 Revenue=c(5,0,0,0),
                 Actual=c(5,0,0,0),
                 Total=c(5,0,0,0))

t2 <- data.frame(Name=c("A","B","C","D"),
                 AvgRevenue=c(5,3,7,10))

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',]$Actual <- 
  as.character(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',]$Name)

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Actual"] <-
  mapvalues(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Actual"],
            t2$Name,
            t2$AvgRevenue,
            warn_missing = FALSE)

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Total"] <- 
  as.character(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar ==      'HW',"Name"])

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Total"] <-
  mapvalues(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Total"],
            t2$Name,
            t2$AvgRevenue,
            warn_missing = FALSE)

t1

t1如果你想用自然语言说出你真正想要的,而不是用SQL显示失败,那么R用户可能会有所帮助。我不知道什么是来源,什么是目的地,也没有可以使用的示例。欢迎使用SO!您应该进行编辑以生成示例,尽管看起来您需要做的只是将
mapvalues
的结果分配给一个变量。您可能还喜欢
dplyr
,它的语法非常类似SQL。谢谢。将mapvalues的结果分配给测试$Actual worked!正确的。为了达到这个目的而使用dplyr似乎有些过分。您可以使用
[
也选择列。问题是他的数据看起来像什么,他实际上想做什么。在我看来,他想用另一个表中的值选择性地更新某些列,但他说有太多SQL代码不起作用,并且没有足够的数据和解释。谢谢你的反馈。这是我的建议数据:我的数据是:t1------------------------------------------名称支柱状态收入实际总收入A SW赢得5 5 B HW打开0 0 C HW赢得0 0 D SW丢失0 0 t2-------名称Avgrevene A 5 B 3 C 7 D 10,我想要的结果是:t1----------------------------------------------------名称支柱状态收入实际总额A SW赢5 5 B HW开放0 3 C HW赢0 7 D SW损失0 0 0 0 0希望这有帮助!
t1 <- data.frame(Name=c("A","B","C","D"), 
                 Pillar=c("SW","HW","HW","SW"),
                 Status=c("Won","Open","Won","Lost"),
                 Revenue=c(5,0,0,0),
                 Actual=c(5,0,0,0),
                 Total=c(5,0,0,0))

t2 <- data.frame(Name=c("A","B","C","D"),
                 AvgRevenue=c(5,3,7,10))

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',]$Actual <- 
  as.character(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',]$Name)

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Actual"] <-
  mapvalues(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Actual"],
            t2$Name,
            t2$AvgRevenue,
            warn_missing = FALSE)

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Total"] <- 
  as.character(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar ==      'HW',"Name"])

t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Total"] <-
  mapvalues(t1[t1$Revenue == 0 & t1$Status != 'Lost' & t1$Pillar == 'HW',"Total"],
            t2$Name,
            t2$AvgRevenue,
            warn_missing = FALSE)

t1