gpt4 book ai didi

r - 用另一个数据表中一列的值更新一个数据表中的一列 NA

转载 作者:行者123 更新时间:2023-12-04 03:43:28 26 4
gpt4 key购买 nike

我看过关于这个主题的类似帖子,但无法理解解决方案。本质上,我有一个带有分数和一些 NA 的数据表(DT1)。无论哪里有“NA”,我都想要一个引用另一个数据 (DT2) 表的过程,该表在两个表 (tract) 中都有一个公共(public)列,然后用 DT2 的 score 列的值更新 DT1 中的 NA。我选择数据表类是因为我认为它是一个有效的选择。

DT1

         tract CreditScore    
1: 36107020401 635
2: 36083052403 NA
3: 36091062602 NA
4: 36067013000 NA
5: 36083052304 NA

DT2
         tract CreditScore  
1: 36107020401 635
2: 36083052403 650
3: 36091062602 335
4: 36067013000 777
5: 36083052304 663

最佳答案

我们创建了新的(更全面的)HTML vignettes对于一些 data.table 概念。看看here对于我们正在处理的其他小插曲。我正在研究连接的小插曲,完成后有望更好地澄清这些类型的问题。

这个想法是首先setkey()DT1在专栏tract .

setkey(DT1, tract)

在 data.tables 中, x[i] 形式的连接需要 x 的 key ,但不一定适用于 i .这会导致两种情况:
  • 如果 i也有键集——i 的第一个键列与 x 的第一个键列匹配,第二对第二等等..
  • 如果 i没有键集——i 的第一列与 x 的第一个键列匹配,i 的第二列针对 x 的第二个键列等等..

  • 在这种情况下,由于您在 i 中的第一列也是 tract ,我们将跳过 i 上的设置键.

    然后,我们执行 x[i] 形式的连接。 .通过这样做,对于每个 i x 中的匹配行索引被计算,然后连接结果被物化。但是,我们不希望将整个连接结果作为新的 data.table。相反,我们想更新 DT1CreditScore DT2 的列在那些匹配的行上..

    在 data.tables 中,我们可以在加入时执行该操作,方法是提供 j 中的表达式, 如下:
    DT1[DT2, CreditScore := i.CreditScore]
    # tract CreditScore
    # 1: 36067013000 777
    # 2: 36083052304 663
    # 3: 36083052403 650
    # 4: 36091062602 335
    # 5: 36107020401 635
    DT1[DT2部分在 DT1 中查找匹配的行 DT2 中的每一行.如果有匹配,我们想要 DT2的值将在 DT1 中更新.我们通过使用 i.CreditScore 来实现这一点-- 指 DT2CreditScore列( i. 是用于区分 xi data.tables 之间名称相同的列的前缀)。

    更新:正如评论中所指出的,上述解决方案还将更新 DT1 中的非 NA 值。 .因此,这样做的方法是:
    DT1[is.na(CreditScore), CreditScore := DT2[.(.SD), CreditScore]]

    CreditScore 的那些行上来自 DT1NA , 替换 CreditScore来自 DT1使用 CreditScore 中的值从 DT2[.(.SD)] 的连接中获得, 其中 .SD对应于 data.table 的子集,其中包含 CreditScore 的所有行是 NA .

    高温高压

    关于r - 用另一个数据表中一列的值更新一个数据表中的一列 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889057/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com