使用类似于SQL连接的不同数据框中的内容来操作数据框

时间:2010-02-11 01:16:10

标签: r dataframe

说我有一个包含内容的数据框:

Trial Person Time
1     John   1.2
2     John   1.3
3     John   1.1
1     Bill   2.3
2     Bill   2.5
3     Bill   2.7

和另一个包含内容的数据框:

Person Offset
John   0.5
Bill   1.0

我希望根据第二个中的适当值修改原始帧。我可以用任何其他语言或SQL轻松地完成这项工作,我确信我可以管理使用for循环和什么,但是我在R中看到的其他所有东西,我猜它有一个特殊的语法来做这个-衬垫。那么,如果是这样,怎么样?如果没有,你能说明如何使用循环完成它。我还没有真正开始学习R中的循环,因为它简单地提取和操作任何值都有惊人的东西。

作为参考,输出将:

Trial Person Time
1     John   0.7
2     John   0.8
3     John   0.6
1     Bill   1.3
2     Bill   1.5
3     Bill   1.7 

2 个答案:

答案 0 :(得分:5)

有很多种可能性。这是一个简单的使用merge()和一个简单的逐列减法放大data.frame

R> DF1 <- data.frame(trial=rep(1:3,2), \
                     Person=rep(c("John","Bill"), each=3), \
                     Time=c(1.2,1.3,1.1,2.3,2.5,2.7))
R> DF2 <- data.frame(Person=c("John","Bill"), Offset=c(0.5,1.0))
R> DF <- merge(DF1, DF2)
R> DF
  Person trial Time Offset
1   Bill     1  2.3    1.0
2   Bill     2  2.5    1.0
3   Bill     3  2.7    1.0
4   John     1  1.2    0.5
5   John     2  1.3    0.5
6   John     3  1.1    0.5
R> DF$NewTime <- DF$Time - DF$Offset
R> DF
  Person trial Time Offset NewTime
1   Bill     1  2.3    1.0     1.3
2   Bill     2  2.5    1.0     1.5
3   Bill     3  2.7    1.0     1.7
4   John     1  1.2    0.5     0.7
5   John     2  1.3    0.5     0.8
6   John     3  1.1    0.5     0.6
R> 

答案 1 :(得分:1)

一个班轮:

transform(merge(d1,d2), Time=Time - Offset, Offset=NULL)