[問題] R 與 SQL 對應的寫法/想法

看板R_Language作者 (立業成家)時間9年前 (2016/12/17 22:14), 9年前編輯推噓2(208)
留言10則, 4人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 新手(沒寫過程式,R 是我的第一次) [問題敘述]: R與SQL在整理/查詢資料上有些類似的用法, 現在想要用R做SQL做的事, 中間卡住,來請教各位大大了~ [程式範例]: SQL: SELECT A.DBName ,A.TableName ,B.Count ,C.LADate ,C.LATime #最後要的5個欄位 FROM Table_A A #主要的表,join最後結果row n不變 LEFT JOIN ( #子查詢1 取 count SELECT A.DBName, A.TableName, sum(A.Count) as Count FROM Count A LEFT JOIN User B ON A.UserName=B.UserName GROUP BY A.DBName,A.TableName WHERE B.User_Type IN ('A','B') ) B ON A.DBName = B.DBName AND A.TableName = B.TableName LEFT JOIN ( #子查詢2 取 LADate,LAtime select DBName, TableName, LADate, LATime from LA QUALIFY ROW_NUMBER() OVER ( PARTITION BY DBName,TableName ORDER BY LADate DESC, LATime DESC)=1 #以LADate DESC,LaTime DESC排序後,取第一列 ) C ON B.DBName = C.DBName AND B.TableName = C.TableName R寫的想法也是和SQL類似, 先寫子查詢,最後再3個表left join, 只寫了2個子查詢,第2段卡住(紅字部分) 若用group_by取top1不太對, 應該要取LADate同一列的LATime sub_q1<-left_join(x=count,y=user,by="UserName") %>%  group_by(DBName,TableName) %>% summarise(sum(Count)) sub_q2<-select(LA,DBName,TableName, LADate,LATime) %>% order_by LADate desc,LATime desc %>% group_by(DBName,TableName) %>% ?? [環境敘述]: R version 3.3.2 (2016-10-31) Platform: i386-w64-mingw32/i386 (32-bit) Running under: Windows >= 8 (build 9200) [關鍵字]: SQL 選擇性,也許未來有用 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.147.47.152 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1481984054.A.B9D.html ※ 編輯: criky (27.147.47.152), 12/17/2016 22:31:14

12/18 00:00, , 1F
是我的話就用RODBC直接寫SQL了...
12/18 00:00, 1F

12/18 00:06, , 2F
你是要取每個group裡的第一列? 我看不太懂QUALIFY
12/18 00:06, 2F

12/18 08:38, , 3F
同意樓上 會SQL的話取資料和資料整理在SQL做,讓R做計算
12/18 08:38, 3F
※ 編輯: criky (27.147.47.152), 12/18/2016 13:00:32

12/18 13:00, , 4F
是取第一列沒錯
12/18 13:00, 4F

12/19 22:33, , 5F
如果是取第一列的話用dplyr的summarize() 裡面取的
12/19 22:33, 5F

12/19 22:34, , 6F
函數用 first()
12/19 22:34, 6F

12/19 22:34, , 7F
應該說是用groupy(aa) %>% summarize(bb=first(cc))
12/19 22:34, 7F

12/20 07:46, , 8F
get it! Thanks!
12/20 07:46, 8F

12/22 09:29, , 9F
hi,this is approach from package data.table
12/22 09:29, 9F

12/22 09:29, , 10F
dat[,.SD[1],the group variable name]
12/22 09:29, 10F
文章代碼(AID): #1OLKWskT (R_Language)
文章代碼(AID): #1OLKWskT (R_Language)