我有两个数据框:
>old
response RT sNumber blockNo
tiger 170 1 1
tornado 36 1 2
tiger 43 1 3
squire 34 2 1
tiger 48 2 2
tornado 49 2 3
tornado 45 3 1
mouse 66 3 2
tiger 75 3 3
>new
response sNumber blockNo
tiger 1 1
tornado 1 2
squire 2 1
tiger 2 2
tornado 3 1
mouse 3 2
tiger 3 3
在新中,原始数量会减少。我想从旧复制 RT 列,并通过响应列执行映射到新,方法是保持正确的值 RT 对应于唯一的 sNumber 和 blockNo 。它应该是这样的:
>new2
response RT sNumber blockNo
tiger 170 1 1
tornado 36 1 2
squire 34 2 1
tiger 48 2 2
tornado 45 3 1
mouse 66 3 2
tiger 75 3 3
通常对于映射我使用这个循环:
for(wrd in unique(old$response)){
new$RT[new$response == wrd] <- old$RT[old$response == wrd]
}
但是,在这种特殊情况下,它会混乱所有RT值,因为它会连续累加它们而不检查唯一的 blockNo 和 sNumber 。我应该如何以我描述的方式执行 RT 的映射?
答案 0 :(得分:3)
要匹配两个data.frames中多个列中的值,并将其中的额外数据添加到另一个,您可以使用$objRest = new Rest('/myurl_base');
$objRest->post('/*/**', function($resource, $arrSubResources)
{
$resource::post_method($arrSubResources, $_POST);
});
。
merge
这将检查 merge(old, new, by = c("response", "sNumber", "blockNo"), all = FALSE)
response sNumber blockNo RT
1 mouse 3 2 66
2 squire 2 1 34
3 tiger 1 1 170
4 tiger 2 2 48
5 tiger 3 3 75
6 tornado 1 2 36
7 tornado 3 1 45
参数中指定的所有命名列中的值是否在data.frames之间匹配。当它们全部匹配时,data.frame中的其他列将添加到合并的数据中。
by=
参数控制结果数据是否应仅包含两个data.frames之间所选列中匹配的行(默认值)。如果all = FALSE
,合并的data.frame将包含data.frames中存在的所有行。