【问题标题】:R, Update matrix with another based on ID'sR,根据 ID 用另一个更新矩阵
【发布时间】:2014-12-02 23:19:33
【问题描述】:

我想合并两个矩阵(或更新一个矩阵),其中包含 ID、坐标 (x,y) 和年份。 假设一个矩阵来自 2011 年,另一个来自 2012 年。

2011 年)

ID       x       y    year
1   5000001 5000000   11
2   5000002 5000000   11
3   5000003 5000000   11
4   5000004 5000000   11

2012 年)

ID       x       y    year
3   5000003 5000001   12
4   5000004 5000001   12
5   5000005 5000000   12
6   5000006 5000000   12
7   5000007 5000000   12

新坐标应始终替换旧坐标。因此,在示例中,应更新 ID 3 a和 4 的坐标,并将 ID 5-7 添加/合并到矩阵中。 a) 替换旧坐标和 b) 将新坐标添加到矩阵中的最有效方法是什么?

到目前为止,我已经制作了包含每年唯一 ID (v1, v2) 的向量,并根据我得到的 ID 不在最新数据 (-> v3) 中。

真正的问题是什么是正确的循环或 if 语句来搜索 v3 ID 向量并将这些 ID 的坐标值添加到最近的数据矩阵 (2012) 中?原谅我,我对这些还不是很好。

我希望这已经足够清楚了。

【问题讨论】:

    标签: r matrix merge updates


    【解决方案1】:

    如果您的矩阵称为 m2011 和 m2012,听起来您只是想将 m2012 中那些在 m2012 中没有 ID 的行添加到 m2012.. 对吗?

    就这样

    newmatrix <- rbind(m2012, 
        matrix(m2011[!(m2011[, "ID"] %in% m2012[, "ID"])], ncol = ncol(m2011)))
    newmatrix[, "year"] <- 12
    

    应该可以。

    (如果你想按ID排序,那么newmatrix &lt;- newmatrix[order(newmatrix[, "ID"]), ]

    【讨论】:

    • ID 没有任何新坐标时,您可能不想更新year 列。如果是这种情况,请忽略newmatrix[, "year"] &lt;- 12 命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多