无法从R中的循环写入矩阵

时间:2016-12-01 19:30:19

标签: r for-loop matrix apply

我试图通过apply中的循环写入矩阵。具体来说,我想对数据集进行排序,并根据该特定变量的中位数为每个变量中的每个值分配高或低。 这些高点将输入矩阵。

到目前为止我的代码是:

df我正在使用的是一个包含36行和大量列的数据集,尽管我只对这种情况下的选择感兴趣。

rows <- 36
columns <- 100

output <- matrix(ncol = columns, nrow = rows)

apply(df[,463:500],2, function(x)
    for (i in 1:36){
    if (x[i] <= median(x)){
        output[i,x-462] <- "low"
    }
    else
        output[i,x-462] <- "high"
    })

首先,当我的代码中有NA时,我收到错误: if(x [i]&lt; = median(x)){:缺少值需要TRUE / FALSE

时出错

我不知道R如何忽略NAs。

第二个问题是,即使我只使用df中没有NA的列,代码只返回null并且矩阵仍然是空的

我知道只需写入矩阵就可以了,例如:

> output[1,1] <- "low"
> output[1,1]
[1] "low"

这感觉它应该是非常简单,任何想法?

由于

2 个答案:

答案 0 :(得分:0)

所以我最终得到它来使用这段代码:

rows <- 36
columns = 50

output <- matrix(ncol = columns, nrow = rows)


for (i in 463:482){
  for (j in 1:36){
      if (is.na(df[j,i]) == FALSE){
          if (df[j,i] <= median(df[,i])){
             output[j,i-462] <- "low"
        }
          else
             output[j,i-462] <- "high"
    }
  }
}

我取消了申请。我承认我对基本循环更加熟悉,而且几乎完全没有应用lapply所以这对我来说更有意义。

然而,这仍然无法处理NA并始终得到错误

missing value where TRUE/FALSE needed

是否可以修改我的代码以补偿所有NA条目?

答案 1 :(得分:0)

试试这个:

sapply(df[,463:500], function(x) ifelse(x <= median(x, na.rm=T),'low','high'))