Заменить значение с помощью режима для каждого столбца
Привет, ребята, я работаю над очень большим набором данных (200 столбцов, 750 000 строк). Есть несколько ячеек со значением -1, и я хочу заменить каждую из этих ячеек на основе режима (самого высокого повторяющегося значения) этого конкретного столбца, а не только одной стандартной вещи для всех -1. Например, -1 в столбце A заменяется на режим в столбце A, -1 в столбце B, замененным на режим столбца B.
Есть ли способ справиться с этим без необходимости создавать новые 200 столбцов и 750 000 строк, используя функцию if?
Спасибо за ваше время.
- Прочитайте txt-файл выборочно в R
- Импорт данных из Excel в R, Больше столбцов, чем имена столбцов
- Преобразование похожих имен в фигуры
- как читать два столбца в XLSX в R
- Экспорт фондовых цен нескольких компаний в разные столбцы в Excel с использованием R
С уважением, InWoords
- Как удалить данные из файла XLSX, сохраняя форматирование в R
- Список data.frame для отдельных листов excel - R
- R - stop write.xlsx () от синтаксически допустимых имен столбцов
- r - ошибка с использованием пакета xlsx в write.xlsx
- Экспорт CSV-файлов с использованием R
- Импорт из Excel Ошибка при запросе базы данных SQL через RODBC
- Как написать таблицу из R в Excel
- Объединение кадра данных в список
Мы можем использовать функцию Mode
здесь
Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] }
Затем с помощью mutate_all
replace
значения -1
на «Режим» каждого столбца
library(dplyr) df1 %>% mutate_all(funs(replace(., .== -1, Mode(.))))
Неясно, является ли значение -1 наиболее частым значением в столбце. В этом исключить, что в mutate_all
df1 %>% mutate_all(funs(replace(., .== -1, Mode(.[. != -1]))))
Кроме того, если есть столбцы без -1, мы можем использовать mutate_if
для пропуска этих
df1 %>% mutate_if(funs(any(.==-1)),funs(replace(., .== -1, Mode(.[. != -1]))))
данные
df1 <- structure(list(V1 = c(1L, 0L, 3L, 2L, 3L, 5L, 0L, 4L, 4L, 0L), V2 = c(3L, 1L, 3L, 3L, 1L, 5L, 0L, -1L, 2L, -1L), V3 = c(-1L, 2L, 4L, -1L, 0L, 3L, -1L, 3L, 3L, -1L), V4 = c(1L, 0L, 1L, 0L, 5L, 0L, 4L, 3L, 3L, 5L), V5 = c(2L, 1L, 0L, 0L, -1L, -1L, 1L, 1L, 0L, 1L)), .Names = c("V1", "V2", "V3", "V4", "V5"), row.names = c(NA, -10L), class = "data.frame")