用每列的模式replace值

嘿家伙,我正在一个非常大的数据集(200列,750,000行)。 有一些值为-1的单元格,我想根据该特定列的模式(最高重复值)replace每个单元格,而不是所有-1的标准事物。 例如,列A中的-1被列A上的模式replace,列B中的-1被列B的模式replace。

有没有办法处理这个,而不必使新的200列和75万行使用如果function?

感谢您的时间。

问候,InWoords

我们可以从这里使用Modefunction

 Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } 

然后,用mutate_all replace每个列的“模式” 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")