【发布时间】:2014-11-25 16:07:36
【问题描述】:
我看到一些问题询问如何比较 R 中两列之间的值,但我无法弄清楚如何使用两列有条件地编辑行的其余部分。我基本上是在尝试对每一行应用不同的范围。
例如:
data <- matrix(c(0.1, 0.3, 0.1,0.5,0.4,0.2,0.3,2,2,1,0.1,0.5,0.4,0.3,0.2), nrow=3, ncol=5)
colnames(data) <- c("Min", "Lim", "Var1", "Var2", "Var3")
data
Min Lim Var1 Var2 Var3
[1,] 0.1 0.5 0.3 1.0 0.4
[2,] 0.3 0.4 2.0 0.1 0.3
[3,] 0.1 0.2 2.0 0.5 0.2
我想将 Var1、Var2 和 Var3 与 Min 和 Lim 列进行比较。如果第 1 行中的 Var1、Var2 或 Var3 值低于第 1 行中的最小值,则该值应替换为“低于最小值”。如果某个值高于 Min 但低于 Lim,则该值应替换为“Below Lim”。如果某个值同时高于 Min 和 Lim,则应保持原样。 我的预期输出是:
data
Min Lim Var1 Var2 Var3
[1,] 0.1 0.5 Below Lim 1.0 Below Lim
[2,] 0.3 0.4 2.0 Below Min Below Lim
[3,] 0.1 0.2 2.0 0.5 0.2
我是 R 新手,并尝试过使用类似...的内容循环遍历行
for(i in 1:nrow(data){
data[i,3:5] <- ifelse(data[,3:5] > data[,1], data[,3:5], "Below LOD")
}
...但这显然不适用于多列(Var1、Var2、Var3),我知道在 R 中应该避免循环。还有其他方法可以实现这一点吗?
非常感谢任何人指出我正确的方向,谢谢!
【问题讨论】:
-
ifelse已经矢量化了,您不需要将其放入for循环中。 -
对于那些变成字符和数值组合的行,你会得到强制,这是你想要的吗?
-
这些结果将在此步骤之后写入 PDF,因此强制不是问题。就是为了好看。这是我的第一个 SO 问题,我不认为在描述中包含该信息,但我一定会在下次提及它!
标签: r