说我有一个包含内容的数据框:
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
答案 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)