【发布时间】:2017-04-16 13:51:56
【问题描述】:
我正在尝试通过 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]
我不知道如何让 R 忽略 NA。
第二个问题是,即使我只使用 df 中没有 NA 的列,代码也只是返回 null 并且矩阵仍然为空
我知道只需写入矩阵即可,例如:
> output[1,1] <- "low"
> output[1,1]
[1] "low"
感觉应该很简单,有什么想法吗?
谢谢
【问题讨论】:
-
我们需要
dput()的df -
R 是一种函数式编程语言,函数默认没有副作用,因此不能修改外部定义的矩阵。通常你可以使用 for 循环,或者如果你想使用
apply(),构造一个新矩阵。