#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")]
Кроме того, этот набор данных был создан не мной, я использую его для назначения. @GregorThomas4. Но как вы перенесли это в 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))