R 使用与SQL联接类似的不同数据帧中的内容操作数据帧
假设我有一个包含以下内容的数据框:R 使用与SQL联接类似的不同数据帧中的内容操作数据帧,r,dataframe,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 以及另一个包含以下内容的数据框: Trial Person Time 1 John 1.2 2 John 1.3 3
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
以及另一个包含以下内容的数据框:
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
有很多可能性。下面是一个使用
merge()
的简单方法,以及放大的数据中的简单列减法。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>
R>DF1-DF2-DF
人试验时间偏移
1工程量清单1 2.3 1.0
2工程量清单2.5 1.0
3工程量清单3 2.7 1.0
4约翰11.20.5
5约翰21.30.5
6约翰3 1.10.5
R> DF$NewTime DF
人员试用时间偏移新时间
1工程量清单1 2.3 1.0 1.3
2工程量清单2.5 1.0 1.5
3工程量清单3 2.7 1.0 1.7
4约翰11.20.50.7
5约翰21.30.50.8
约翰3 1.10.50.6
R>
一个衬里:
transform(merge(d1,d2), Time=Time - Offset, Offset=NULL)
哈我刚刚想出了一个使用for循环的单行程序,但这更漂亮。我不知道你可以合并两个帧,它会根据列名确定它们的位置。你可以使用更具体的标题。@dalloliogm可以随意提出建议。@dalloliogm在十分钟内得到了我需要的答案是的,但因为标题太笼统了,人们只是为了更好地理解它是什么。所以你把注意力从其他可能写得更好的问题上移开了,这是不公平的。一个好的标题应该是这样的,这样一个人就可以通过阅读了解你要问什么。不管怎样,和平,你没有做什么太可怕的事,没关系。如果你有更好的方式来描述它,我会更改标题。。。我只是不知道如何用一种完美的方式来描述我的问题。看看这个问题,找出如何使用合并。