2014-04-01 152 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是重复的,可以说是不必要的)。