首页 > 解决方案 > 无法在 DT 中合并,因为我强制双 RHS 合乎逻辑

问题描述

我在将 1 个名为 data.all 的 df 中的 1 列合并到我的工作 df 调用数据时出现此错误

setDT(data)[setDT(data.all), RX_HOSP_SURG_APPR_2010 := i.RX_HOSP_SURG_APPR_2010, on=c("PUF_CASE_ID","SR_ID" )]

警告信息:在[.data.table(setDT(data), setDT(data.all), :=(RX_HOSP_SURG_APPR_2010, : 将双 RHS 强制为逻辑以匹配目标列的类型(名为 'RX_HOSP_SURG_APPR_2010' 的列 157)。如果目标列的逻辑类型正确,则最好避免强制并将 RHS 创建为逻辑类型. 要实现这一点,请考虑 R 的类型后缀:typeof(0L) vs typeof(0) 和 typeof(NA) vs typeof(NA_integer_) vs typeof(NA_real_)。您可以使用 as.logical() 包装 RHS 以避免此警告, 但这仍然会执行强制。如果目标列的类型不正确,最好重新访问创建 DT 的位置并在那里修复列类型;例如,通过在 fread() 中使用 colClasses=。否则,您可以更改现在通过在其顶部插入一个新列(所需类型的)来获得列类型;例如 DT[, RX_HOSP_SURG_APPR_2010:=as.double(RX_HOSP_SURG_APPR_2010)]。如果 := 的 RHS 具有 nrow(DT) 元素,则分配称为列 plonk 并且是更改列类型的方法。可以使用 sapply(DT,typeof) [... truncated] 观察列类型

我尝试了不同的方法,但我无法弄清楚

str(data$RX_HOSP_SURG_APPR_2010)

逻辑 [1:8671] 错误 错误 错误 NA NA NA ...

str(data.all$RX_HOSP_SURG_APPR_2010)

'haven_labelled' num [1:129296] 0 0 NA NA NA NA NA NA NA NA ... - attr( , "label")= chr "该设施 2010 年及以后的手术方法" - attr( , "format.spss ")= chr "F1.0" - attr( , "display_width")= int 23 - attr( , "labels")= Named num [1:7] 0 1 2 3 4 5 9 ..- attr(*, “names”)= chr [1:7] “原发部位无外科手术”“机器人辅助”“机器人转开放”“腹腔镜”...

任何建议将被认真考虑。

标签: rmergedata.tablecoerce

解决方案


您可以共享您dput(head(data))dput(head(data.all))“巨大”数据。请改进您的问题。

为了在连接过程中进行动态评估,您需要两个列类相同,并且正如您所注意到的,您的变量 indata是合乎逻辑的(可能是因为在您从文件中读取它时它只有零和 NA)而你的变量 indata.all是一个奇怪的类。

您可以尝试先分配班级:

class(data$RX_HOSP_SURG_APPR_2010) <- class(data.all$RX_HOSP_SURG_APPR_2010)

推荐阅读