Не могу слить в DT, как я получил Coerced двойной RHS для логического - PullRequest
0 голосов
/ 15 октября 2019

Я получил эту ошибку при объединении 1 столбца из 1 df с именем data.all в мои рабочие dfcalled data

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

Предупреждение: In [.data.table (setDT (data), setDT(data.all), := (RX_HOSP_SURG_APPR_2010,: принудительное двойное RHS для логического совпадения с типом целевого столбца (столбец 157 с именем 'RX_HOSP_SURG_APPR_2010'). Если логический тип целевого столбца правильный, лучше избегать эффективностиприведение и создание RHS как логического типа. Для этого рассмотрим постфикс типа R: typeof (0L) против typeof (0) и typeof (NA) против typeof (NA_integer_) против typeof (NA_real_). Вы можете обернуть RHS с помощьюas.logical (), чтобы избежать этого предупреждения, но оно все равно будет выполнять приведение. Если тип целевого столбца неверен, лучше пересмотреть место создания DT и исправить там тип столбца, например, с помощью colClasses = infread (). В противном случае вы можете изменить тип столбца, добавив новый столбец (нужного типа) поверх него, например, DT [, RX_HOSP_SURG_APPR_2010: = as.double (RX_HOSP_SURG_APPR_2010)]. Если RHS of: = имеет элементы nrow (DT), то назначение называется plonk столбца и является способом изменения типа столбца. Типы столбцов можно наблюдать с помощью sapply (DT, typeof) [... усечено]

Я пробовал разные способы, но не мог понять это

str(data$RX_HOSP_SURG_APPR_2010)

logi [1: 8671] FALSE FALSE NA NA NA ...

str(data.all$RX_HOSP_SURG_APPR_2010)

'haven_labelled' num [1: 129296] 0 0 NA NA NANA NA NA NA NA ... - attr (, "label") = chr "Хирургический подход на этом учреждении 2010 и позже" - attr (, "format.spss") = chr "F1.0"- attr (," display_width ") = int 23 - attr (," tags ") = Named num [1: 7] 0 1 2 3 4 5 9 ..- attr (*," names") = chr [1: 7]" Хирургическая процедура на первичной площадке не предусмотрена "" Роботизированная помощь "" Роботизированная переоборудована в открытую "" Лапароскопическая "...

Любой совет будет оценен.

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете поделиться dput(head(data)) и dput(head(data.all)) ваших "гигантских" данных. Пожалуйста, улучшите свой вопрос.

Для того, чтобы работать на лету во время объединения, вам нужно, чтобы оба класса столбцов были одинаковыми, и, как вы заметили, ваша переменная в data логична (вероятно, потому, что во время чтения изфайл, в котором были только нули и NA), в то время как ваша переменная в data.all является странным классом.

Вы можете сначала попытаться назначить класс с помощью:

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