r - 使用 R 将条件语句应用于数据框中的所有元素

标签 r if-statement dataframe conditional-statements

我有一个看起来像这样的数据框-

> 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/

相关文章:

bash - 如何在 bash 脚本中正确使用 elif 与 && 和 -o

r - 根据数据框中的公共(public)标识符和特定列按比例划分行值

从数据框中删除行,其中两列中的值在 R 中不匹配

r - 如何在 geom_text 中使用 position_dodge with preserve = 'single'?

r - 如何正确使用 tryCatch() 并忽略此 rvest 函数中的 404 错误?

c++ - If语句问题

python - Pandas DataFrame 乘以数组

R geom_bar facet_grid 垂直而不是水平

r - 在 ggplot boxplot 中的填充组内显示单独的均值

C++ 在 if 语句中使用 rand