2012-03-27 90 views
1

添加到列表中我有2個單獨的dataframes一個數據幀匹配數據幀的列表,並且一個新的變量中的R

DF1

ID  Name  loq 
1  a  1.2 
1  b  1.4 
1  c  1.0 
2  a  0.5 
2  b  0.7 
2  c  0.3 
3  a  0.5 
3  b  0.2 
3  c  0.1   

DF2這是dataframes列表

[1] ID  Name 
    1  a 
    3  b 
    2  c 
    2  a 

[2] ID  Name 
     3  c 
     2  b 
     2  a 
     1  c 

df2的結果看起來像這樣

[1] ID  Name loq 
    1  a  1.2 
    3  b  0.2 
    2  c  0.3 
    2  a  0.5 

[2] ID  Name loq 
     3  c  0.1 
     2  b  0.7 
     2  a  0.5 
     1  c  1.0 

我有一長串數據框。

我想從df1添加匹配ID和名稱到df2列表和一個名爲loq的新變量基於匹配的df2列表。

我知道如何做一個數據框內的匹配變量,但不知道如何匹配一個DF到一個數據框列表。

回答

3

保持基地,這是很直接的,做你想做什麼:

# Create the data frames/lists 
df1 <- data.frame(
    ID = gl(3,3), 
    Name = rep(letters[1:3], 3), 
    loq = c(1.2, 1.4, 1.0, 0.5, 0.7, 0.3, 0.5, 0.2, 0.1) 
) 
df2 <- list() 
df2[[1]] <- data.frame(ID = factor(c(1, 3, 2, 2)), Name = c('a', 'b', 'c', 'a')) 
df2[[2]] <- data.frame(ID = factor(c(3, 2, 2, 1)), Name = c('c', 'b', 'a', 'c')) 

lapply(df2, merge, y = df1) # merge df2 list elements accordingly to df1 

您也可以手動指定哪些可合併。在這種情況下,它會查找匹配的列名稱:c(ID,Name)。如果你希望把DF2成數據幀,你可以不喜歡

do.call("rbind.data.frame", df2) # uses df2 list elements as arguments to rbind 

這裏的關鍵是,列編號和名稱唯一定義記錄(在數據庫方面,他們必須是複合主鍵對於那個數據表(幀))。通過這種方式,通過df1中的匹配合並(加入)df2列表元素(數據框)不會導致重複,因此會出現問題。這就是說,只要沒有兩個具有相同ID和名稱值的不同行,它就會工作。

+0

這非常有幫助,正是我所需要的。非常感謝。 – John 2012-07-23 05:53:36

相關問題