Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用与SQL联接类似的不同数据帧中的内容操作数据帧_R_Dataframe - Fatal编程技术网

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在十分钟内得到了我需要的答案是的,但因为标题太笼统了,人们只是为了更好地理解它是什么。所以你把注意力从其他可能写得更好的问题上移开了,这是不公平的。一个好的标题应该是这样的,这样一个人就可以通过阅读了解你要问什么。不管怎样,和平,你没有做什么太可怕的事,没关系。如果你有更好的方式来描述它,我会更改标题。。。我只是不知道如何用一种完美的方式来描述我的问题。看看这个问题,找出如何使用合并。