与包含R中两个表(dataframes)的SELECT查询等价的是什么?
在R中设置的我的sqldf默认使用SQLite。我尝试了以下查询,但未成功:与包含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
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