2017-08-28 26 views
2

我想從兩個或兩個以上dataframes打印數據模型,爲此我使用提供的庫datamodelr添加引用的名單datamodelr

我使用的數據幀的這兩個例子:

DT1 

     nombre x networth  date lala 
1: david 22  1000 12-24-1997 3 
2: ekstrm NA  900 15-10-1995 5 
3: alex 24  800 14-9-2000 6 
4: júlia 19  1300 14-09-2000 7 
5: alvaro 30  NA 14-09-2000 8 
6:  . .  NA   NA NA 
7: laia 40  500 09/14/2000 10 
8: lala 50  400 14/09/2000 12 

DT2 
     nota nombre 
    1: david  10 
    2: ekstrm  9 
    3: alex  24 
    4: júlia  19 
    5: alvaro  30 
    6: laia  40 
    7: lala  22 

目前我可以爲每個數據框繪製每個表格,我可以使用這幾行定義它們之間的關係與函數dm_add_references

dm_f <- dm_from_data_frames(DT1, DT2) 

dm_f <- dm_add_references(
    dm_f, 

    DT1$nombre == DT2$nota, 
    DT1$x == DT2$nombre 
) 
graph <- dm_create_graph(dm_f, rankdir = "BT", col_attr = c("column", "type")) 
dm_render_graph(graph) 

這個問題似乎當我試圖dinamically使這個引用,例如具有列之間這一切引用的列表,我之前提取。我嘗試這一點,但它不工作:

a <- "" 
c <- list("DT1$nombre == DT2$nota,", "DT1$x == DT2$nombre") 
for(i in seq_along(c)) { 
    a <- noquote(paste(a, c[i])) 
} 

dm_f <- dm_add_references(
    dm_f, 

    a 
) 

Error: Define references with logical expressions: dataframe1$column1 == dataframe2$column2, ...

這將是非常有益的,如果有人能幫助我這個問題。

回答

0

最後,我已經能夠以一種自動的方式創建一堆數據框之間的引用。我在這裏發佈解決方案,希望對某人有用。

還有另一個函數dm_add_reference_可以在兩個數據幀之間進行一次引用。訣竅是你可以根據需要聲明多個引用,迭代地調用這個函數。

dm_f <- dm_add_reference_(dm = dm_f, table="DT1", column="nombre", ref = "DT3", ref_col = "nombre") 
dm_f <- dm_add_reference_(dm = dm_f, table="DT3", column="nombre", ref = "DT2", ref_col = "nota") 

因此,採取這一點與包含存儲在列表中的dataframes之間關係的所有信息,我解決了這樣的問題。

dm_f <- dm_from_data_frames(DT1, DT2, DT3) 
for(i in 1:length(equalcols)) { 
    dm_f <- dm_add_reference_(dm = dm_f, table=equalcols[[i]][[1]], column=equalcols[[i]][[3]], ref = equalcols[[i]][[2]], ref_col = equalcols[[i]][[4]]) 
} 

其中equalcols包含每個數據幀之間所有引用所需的信息。