示例输入:
Column
Row 1 2 3 4
1 34.349 23.642 64.321 12.320
2 74.734 11.755 29.424 55.432
3 31.345 99.328 64.236 45.453
4 22.436 84.345 45.323 21.008
5 7.323 101.324 45.254 32.233
6 119.345 23.324 72.474 53.543
逻辑运算符:x> 70提供了以下示例输出:
Column
Row 1 2 3 4
1 2 3 6 NA
我是R的新手,并努力使用标准match和哪个函数来获得此输出。任何帮助将不胜感激。
答案 0 :(得分:1)
因为这是一个矩阵,我们可以将apply
与margin = 2
一起使用(列方式)。在这里,我们检查该列是否具有至少一个大于70的值并返回其索引,否则返回NA。
apply(mat > 70, 2, function(x) if (any(x)) which.max(x) else NA)
#V1 V2 V3 V4
# 2 3 6 NA
理想情况下,apply(mat > 70, 2, which.max)
会给您所需的内容,但是当您没有大于70的元素时会失败,因此,检查条件为if
和any
。
这也适用于数据框。
如果没有大于70的元素并且列具有NA
值,则它将返回错误。
mat[1, 4] <- NA
apply(mat > 70, 2, function(x) if (any(x)) which.max(x) else NA)
if(any(x))which.max(x)else错误:NA: 缺少需要TRUE / FALSE的值
在这种情况下,我们可以在na.rm
中使用any
参数来避免此错误。
apply(mat > 70, 2, function(x) if (any(x, na.rm = TRUE)) which.max(x) else NA)
#V1 V2 V3 V4
# 2 3 6 NA