放置数据框特定值的特定位置

时间:2015-03-15 10:16:49

标签: r

    DF <- data.frame(x1=c(NA,7,7,8,NA), x2=c(1,4,NA,NA,4)) # a data frame with NA
    WhereAreMissingValues <- which(is.na(DF), arr.ind=TRUE) # find the position of the missing values
    Modes <- apply(DF, 2, function(x) {which(tabulate(x) == max(tabulate(x)))}) # find the modes of each column
DF
WhereAreMissingValues
Modes

我想用模式替换每列DF的NA。 请帮忙。

2 个答案:

答案 0 :(得分:3)

Map在这里提供了一个单行解决方案:

data.frame(Map(function(u,v){u[is.na(u)]=v;u},DF, Modes))

#  x1 x2
#1  7  1
#2  7  4
#3  7  4
#4  8  4
#5  7  4

答案 1 :(得分:2)

以下是我将如何做到这一点。 首先,我将定义一个辅助函数

Myfunc <- function(x) as.numeric(names(sort(-table(x)))[1L])

然后在数据集上使用lapply

DF[] <- lapply(DF, function(x){x[is.na(x)] <- Myfunc(x) ; x})
DF
#   x1 x2
# 1  7  1
# 2  7  4
# 3  7  4
# 4  8  4
# 5  7  4