为什么我的函数不会覆盖变量的一部分?

时间:2019-04-12 17:27:55

标签: r

我写了一个应该计算每列有多少个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 个答案:

答案 0 :(得分:2)

我们可以将逻辑colSumsmatrix)中的is.na(a)rbind放入matrix

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

在这里,假设“ a”来自代码的第一行

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

如果我们要在创建tibble后替换最后一行

a %>% 
  mutate_all(list(~ replace(., n(), sum(is.na(.[-n()])))))