Почему моя функция не перезаписывает часть моей переменной? - PullRequest
0 голосов
/ 12 апреля 2019

Я написал функцию, которая должна подсчитывать количество NA на столбец. До того, как я собрал все в функцию, она работала. Теперь это не так.

Бьюсь об заклад, просто глупая ошибка новичка, все же, я мог бы использовать вашу помощь в этом.

Я думаю, что утверждение

x[nrow(x),i] <- aux_count

неправильно назначает мои вещи. Почему я удивляюсь.


Следующий код показывает мою функцию, которая демонстрирует проблему.

check_Quandl_tibble <- function(x){
  for(i in 2:ncol(x)){

    aux_count <- 0
    for(j in  1:(nrow(x)-1)){

      if(is.na(x[j,i])){

        aux_count <- aux_count + 1

      }

    }
    x[nrow(x),i] <- aux_count

  }
}
a <- matrix(c(1,4, NA, 81), nrow = 5, ncol = 5)
a <- rbind(a, rep(NA, ncol(a)))
a <- as_tibble(a)

# a now looks like this
# A tibble: 6 x 5
     V1    V2    V3    V4    V5
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     4    NA    81     1
2     4    NA    81     1     4
3    NA    81     1     4    NA
4    81     1     4    NA    81
5     1     4    NA    81     1
6    NA    NA    NA    NA    NA
a <- check_Quandl_tibble(a)

# a now looks like this
# A tibble: 6 x 5
     V1    V2    V3    V4    V5
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     4    NA    81     1
2     4    NA    81     1     4
3    NA    81     1     4    NA
4    81     1     4    NA    81
5     1     4    NA    81     1
6    NA    NA    NA    NA    NA
# instead I wanted 
# A tibble: 6 x 5
     V1    V2    V3    V4    V5
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     4    NA    81     1
2     4    NA    81     1     4
3    NA    81     1     4    NA
4    81     1     4    NA    81
5     1     4    NA    81     1
6     1     1     2     1     1 # this row is supposed to count the NA's per column. 

1 Ответ

2 голосов
/ 12 апреля 2019

Мы можем взять colSums логических matrix (is.na(a)) и rbind до matrix

rbind(a, colSums(is.na(a)))

Здесь предполагается, что «а» взято из первой строки кода

a <- matrix(c(1,4, NA, 81), nrow = 5, ncol = 5)

Если мы хотим заменить последнюю строку после создания tibble

a %>% 
  mutate_all(list(~ replace(., n(), sum(is.na(.[-n()])))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...