rstudio cloud integer64 (логическое значение) в строку

#r #boolean #int64

#r #логическое #int64

Вопрос:

Этот набор данных состоит из 70 000 записей данных о пациентах в 12 столбцах, таких как возраст, пол, систолическое артериальное давление, диастолическое артериальное давление и т.д. Все столбцы являются числовыми, 12 целых чисел и 1 десятичное число.

Я пытаюсь преобразовать столбец «пол» из integer64 в строку, чтобы 1 мог представлять женский «F», а 2 — мужской «M». Однако, когда я пытаюсь это сделать, выходные данные представляют собой длинные строки: выходные данные представляют собой длинные строки

Вот изображение моих кодов: коды

 # Let's change "1" and "2" to represent F and M: 
cleandf_nomiss <- na.omit(cleandf_sample)             # Remove null values
cleandf_nomiss$sex < toString(cleandf_nomiss$sex)     # Convert int64 to string
head(cleandf_nomiss)                                  # Check
cleandf_nomiss <- cleandf_sample %>%                  # Replace "1"="F" "2"="M"
  mutate(sex = recode_factor(sex, `1` = "F", `2` = "M"))
  

Вывод последнего кода для замены 1 = F и 2 = M выглядит следующим образом:

 Error: Problem with `mutate()` input `sex`.
x no applicable method for 'recode' applied to an object of class "integer64"
ℹ Input `sex` is `recode_factor(sex, `1` = "F", `2` = "M")`.
Run `rlang::last_error()` to see where the error occurred.
  

Комментарии:

1. Можете ли вы поделиться небольшим количеством данных? dput(cleandf_nomiss[1:5, "sex", drop = FALSE]) очень помогло бы.

2. И как sex столбец со значениями 1 и 2 стал int64 в первую очередь? Похоже, это должно быть просто обычное целое число. Проще всего исправить эту проблему, возможно, раньше в вашем коде, когда вы читаете свои данные (или всякий раз, когда происходит преобразование). Обычные 32-разрядные целые числа увеличиваются до 2 147 483 647; вам не нужны 64-разрядные целые числа для sex столбца.

3. [> dput(cleandf_nomiss[1:5, "sex", drop = FALSE]) structure(list(sex = structure(c(9.88131291682493e-324, 4.94065645841247e-324, 4.94065645841247e-324, 9.88131291682493e-324, 4.94065645841247e-324 ), class = "integer64")), row.names = c(NA, 5L), class = "data.frame")] Кроме того, этот набор данных был создан не мной, я использую его для назначения. @GregorThomas

4. Но как вы перенесли это в R? Это CSV, xlsx, JSON, Rdata, что-то еще? Вы использовали read.table() или readr::read_csv или data.table::fread или vroom::vroom или readRDS или что-то еще? Вполне возможно, что ваш процесс загрузки данных в ваш сеанс R является проблемой и может быть лучшим местом для решения проблемы.

5. Но это также может быть проще — toString объединяется в результат длиной 1. Попробуйте заменить ваш toString на as.character . Вы as.character(c(1, 1, 2)) не хотите toString(c(1, 1, 2))