Моя собственная созданная функция: RemoveNA работает наполовину - PullRequest
0 голосов
/ 23 января 2019

Вот мой код:

    PATH <- 
 "https://raw.githubusercontent.com/thomaspernet/data_csv_r/master/data/titanic_csv.csv"

df_titanic <- read.csv(PATH, sep = ",")

RemoveNA = 
function(x)
{
  colmiss = colnames(x)[apply(x,2,anyNA)]
  colmiss
  i = 1
  while ( i <= length(colmiss))
  {
   col_na_col  = match(colsmiss[i],names(x))
   col_na_col 
   for (n in col_na_col)
   {
    #column_name = colsmiss[i]
    cat('  Your missing column is: ' ,'"',colsmiss[i],'"','  and col.no is : ',n, '||||')
    # Create mean
    average_missing <- mean(x[,colsmiss[i]],na.rm =TRUE)
    average_missing
    x[n][is.na(x[n])] = average_missing
   }
   i = i + 1
  }
} 

sum(is.na(df_titanic))
RemoveNA(df_titanic)

Когда я запускаю функцию RemoveNA , это дает: Ваш отсутствующий столбец: "age" и col.no: 6 |||| Ваш пропущенный столбец: «стоимость проезда» и col.no: 10 |||| это нормально, но замена ниже не выполнена должным образом , как сумма (is.na (df_titanic)) как до, так и после суммы до 264

1 Ответ

0 голосов
/ 23 января 2019

Вот более простой способ:

df1 <- data.frame(a= c(NA,1,NA,2), b = 1:4)
df1[] <- lapply(df1, function(x) replace(x,is.na(x),mean(x,na.rm=TRUE)))
df1
#     a b
# 1 1.5 1
# 2 1.0 2
# 3 1.5 3
# 4 2.0 4

Ваш код имеет тип, вы набрали colsmiss вместо colmiss.

Также ваш код ничего не возвращает (он возвращает последнее значение I), поэтому ваше преобразование значений NA нигде не записано.

Ваша исправленная функция:

RemoveNA = function(x)
  {
    colmiss = colnames(x)[apply(x,2,anyNA)]
    colmiss
    i = 1
    while ( i <= length(colmiss))
    {
      col_na_col  = match(colmiss[i],names(x))
      col_na_col 
      for (n in col_na_col)
      {
        #column_name = colsmiss[i]
        cat('  Your missing column is: ' ,'"',colmiss[i],'"','  and col.no is : ',n, '||||')
        # Create mean
        average_missing <- mean(x[,colmiss[i]],na.rm =TRUE)
        average_missing
        x[n][is.na(x[n])] = average_missing
      }
      i = i + 1
    }
    x
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...