用每列的模式replace值
嘿家伙,我正在一个非常大的数据集(200列,750,000行)。 有一些值为-1的单元格,我想根据该特定列的模式(最高重复值)replace每个单元格,而不是所有-1的标准事物。 例如,列A中的-1被列A上的模式replace,列B中的-1被列B的模式replace。
有没有办法处理这个,而不必使新的200列和75万行使用如果function?
感谢您的时间。
问候,InWoords
我们可以从这里使用Mode
function
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")