вчера пытался с серии колонок применить apply, чтобы сдедать из фактора as.numeric(factor()), чтобы потом с помощью того же apply сделать массовый recode. До apply для факторов были заданы все необходимые уровни. После apply они не только исчезли, но и перевернулись.
История типа такая:
1. D1 <- D0[, c(32, 35, 38:41, 44, 52:55)] # вытащились колонки из оригинальной БД
2. D1 <- apply(D1, 2, function (x) as.numeric(factor(x))) # хочу сразу все колонки в D1 в цифровой код перевести
3. D1 <- apply(D1, 2, function (x) recode(x, "1:2 = 0; 3:4 = 1; NA = 0")) # что было 1-2 —> 0, остальное в 1.
были где-то в инете. например, такой вот неплох: https://nicercode.github.io/guides/repeating-things/ другое дело, что сейчас лучше не мучаться и использовать purrr. по нему источников много и сам пакет консистентный
Спасибо, сейчас почитаю. Выше я дополнил пост с проблемой. То есть такой порядок шагов лучше решить с помощью purrr?
mutate_at/mutate_if. они хоть и superseded, но очень удобны. более читаемы чем across https://dplyr.tidyverse.org/reference/mutate_all.html
Походу без tidyverse не обойтись. Буду смотреть. Но у меня программирования нет. Только аналитика.
воспроизводимый пример нужен. делается это все в 2 строчки и pipe! кристальность мышления формирует. можно и на data.table
аналитика без программирования — ад уже на земле. воспроизводимость результата — залог спокойствия
apply лучше вообще не использовать. Он матрицу вернет и вообще вид его результат сложно предугадать. В вашем случае lapply поможет: D1[] <- lapply(D1, function (x) as.numeric(factor(x))) D1[] <- lapply(D1, function (x) recode(x, "1:2 = 0; 3:4 = 1; NA = 0")) Пустые квадратные скобочки нужны, чтобы остался data.frame, а не список
О, да! Хорошие функции.
mutate_all(D1, ~as.numeric(factor(.x))) ? # хочу сразу все колонки в D1 в цифровой код перевести
О, про скобки не дотумкал, потому что не знал о таком! Век учись...
Обсуждают сегодня