2014-04-01 153 views
0

我經常需要在數據幀之間傳輸數據。通常來自數據來源的數據幀是數據所要傳送到的數據幀的較小子集。在數據幀之間傳輸數據

可以說我有這個數據幀:

df <- data.frame(ID = c(1,3,6,9), variable = c(-0.1, 0, 0, 0.1)) 

    ID variable 
1 1  -0.1 
2 3  0.0 
3 6  0.0 
4 9  0.1 

我需要從df轉移variablesleep,但只能在行,其中ID在兩個dfsleep相同。

要做到這一點,我通常使用一個循環是這樣的:

sleep$variable <- NA 
     for (i in seq_along(sleep$ID)) { 
     x <- which(sleep$ID == df$ID[i]) 
     sleep$variable[x] <- df$variable[i] 
     } 

sleep 

    extra group ID variable 
1 0.7  1 1  -0.1 
2 -1.6  1 2  NA 
3 -0.2  1 3  0.0 
4 -1.2  1 4  NA 
5 -0.1  1 5  NA 
6 3.4  1 6  0.0 
7 3.7  1 7  NA 
8 0.8  1 8  NA 
9 0.0  1 9  0.1 
10 2.0  1 10  NA 
11 1.9  2 1  -0.1 
12 0.8  2 2  NA 
13 1.1  2 3  0.0 
14 0.1  2 4  NA 
15 -0.1  2 5  NA 
16 4.4  2 6  0.0 
17 5.5  2 7  NA 
18 1.6  2 8  NA 
19 4.6  2 9  0.1 
20 3.4  2 10  NA 

我正在尋找一個函數,將得到相同的結果,但需要更少的代碼。理想情況下,我希望該函數只接受3個參數:數據來自的向量,數據要去的向量以及用於匹配兩個數據幀中的行的向量。

R中有這樣一個函數嗎?或者,任何人都可以提供這樣的功能?

+0

你看'merge()'嗎? –

+0

有很多不同的方法可以在R中做到這一點。[問題/答案](http://stackoverflow.com/questions/4322219/whats-the-fastest-way-to-merge-join-data-frames-in -r)對各種方法進行了很好的比較。 – jlhoward

回答

1

如何match

sleep <- data.frame(extra = runif(100), group = rep(1:10, each = 10), ID = rep(1:10, times = 10)) 

sleep$variable <- df$variable[match(sleep$ID, df$ID)] 

這需要四個參數(ID是重複的,可以說是不必要的)。