我有一个看起来像这样的数据框-
> dpd
md mean sd fsf dii n
2 77.5 0.02827206 0.05761423 0.8382353 29.648895 136
3 120.0 0.07058824 0.04696682 0.5882353 8.333333 17
NA NA NA NA NA NA NA
... ...
NA.8 NA NA NA NA NA NA
13 650.0 0.00500000 NA 1.0000000 200.000000 1
NA.9 NA NA NA NA NA NA
.. ...
NA.12 NA NA NA NA NA NA
18 900.0 0.00500000 NA 1.0000000 200.000000 1
我想以这样的方式创建一个 if-else 语句,只有当数据帧中所有“dii”值 >= 20 并且“fsf”值 >= 0.8 时,该函数才会打印“GOOD”,否则“你有问题!”。所以我尝试了这样的事情-
if (dpd$fsf[!is.na(dpd$fsf)] > 0.8 & dpd$dii[!is.na(dpd$dii)] >= 20)
print("GOOD") else print("You have problem!")
数据帧清楚地表明,row#3 值不符合这两个条件,但 R 仅考虑第一个元素,如下所示:
[1] "GOOD"
Warning message:
In if (dpd$fsf[!is.na(dpd$fsf)] > 0.8 & dpd$dii[!is.na(dpd$dii)] >= :
the condition has length > 1 and only the first element will be used
如何改进我的条件语句,使其显示“您有问题!”另外,有没有办法以我选择的颜色打印文本“GOOD”?
最佳答案
如果您想检查所有逻辑条件的计算结果是否为TRUE
,您应该将函数all
包裹在它周围。否则,您将拥有一个在 if
内包含多个元素的逻辑向量,并且 if
将仅使用该向量的第一个元素。
x <- 1:3
y <- 1:3
x > 2 & y < 3
[1] FALSE FALSE FALSE
if (x < 2 & y < 3) print("good")
[1] "good"
Warning message:
In if (x < 2 & y < 3) print("good") :
the condition has length > 1 and only the first element will be used
现在检查逻辑向量的所有元素是否为TRUE
all(x > 2 & y < 3)
[1] FALSE
if (all(x > 2 & y < 3)) print("good")
关于r - 使用 R 将条件语句应用于数据框中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222866/