忽略函数中的NA值

时间:2017-11-11 19:06:11

标签: r function na

我正在编写自己的函数来计算数据集中列的平均值,然后使用apply()应用它,但它只返回第一列的意思。以下是我的代码

VC1

3 个答案:

答案 0 :(得分:3)

我们需要使用na.rm=TRUE中的sum并在apply中使用mymean无效,因为mymean <- function(cleaned_us){ column_total = sum(cleaned_us, na.rm = TRUE) #change column_length = sum(!is.na(cleaned_us)) #change return(column_total/column_length) } 没有该参数

colMeans

请注意,mean可用于获取每列的extends AppCompactActvity

答案 1 :(得分:0)

为了将na.rm参数传递给您定义的函数,您需要将其作为函数的参数。 sum()函数有一个na.rm参数,但length()没有。# include `na.rm` as a param of the argument mymean <- function(cleaned_us, na.rm){ # pass it to `sum()` column_total = sum(cleaned_us, na.rm=na.rm) # if `na.rm` is set to `TRUE`, then don't count `NA`s if (na.rm==TRUE){ column_length = length(cleaned_us[!is.na(cleaned_us)]) # but if it's `FALSE`, just use the full length } else { column_length = length(cleaned_us) } return (column_total/column_length) } 。因此,要编写您要编写的函数,您可以说:

Average_2 <- apply(numeric_clean_usnews, 2, mymean, na.rm=TRUE)

然后你的电话应该有效:

{{1}}

答案 2 :(得分:0)

使用na.omit()

set.seed(1)
m <- matrix(sample(c(1:9, NA), 100, replace=TRUE), 10)

mymean <- function(cleaned_us, na.rm){
    if (na.rm) cleaned_us <- na.omit(cleaned_us)
    column_total = sum(cleaned_us)
    column_length = length(cleaned_us)
    column_total/column_length
}

apply(m, 2, mymean, na.rm=TRUE)

# [1] 5.000 5.444 4.111 5.700 6.500 4.600 5.000 6.222 4.700 6.200