我试图通过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"
这感觉它应该是非常简单,任何想法?
由于
答案 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'))