R 输出矩阵中每列的第一个元素的行索引,以满足逻辑条件
我有一个包含数字数据的大矩阵(8000 x 8000)。我想要一个输出矩阵,其中一行包含每列中第一个元素的行索引,以满足逻辑运算符的要求。请注意,并非所有列都有满足条件的元素 输入示例:R 输出矩阵中每列的第一个元素的行索引,以满足逻辑条件,r,indexing,match,R,Indexing,Match,我有一个包含数字数据的大矩阵(8000 x 8000)。我想要一个输出矩阵,其中一行包含每列中第一个元素的行索引,以满足逻辑运算符的要求。请注意,并非所有列都有满足条件的元素 输入示例: Column Row 1 2 3 4 1 34.349 23.642 64.321 12.320 2 74.734 11.755 29.424 55.432
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新手,很难使用标准匹配和哪些函数来获得此输出。因为,它是一个矩阵,我们可以使用
应用,并且边距=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
条件
这也适用于dataframe
若并没有大于70的元素,且列具有NA
值,则返回一个错误
mat[1, 4] <- NA
apply(mat > 70, 2, function(x) if (any(x)) which.max(x) else NA)
你也可以使用Position
,它应该比which快。max
@PoGibas实际上以前没有使用Position
函数:)我用8e3x8e3矩阵上的microbenchmark快速检查过,它更快,但我不知道它如何处理未找到的(NA
)值。你好,Ronak,是否可以修改代码以处理包含NA值的矩阵?当应用于具有NA值的矩阵时,获取以下错误消息:“if(any(x))which.max(x)else NA中出错:缺少值,其中为TRUE/FALSEneeded@Jdj67它应该仍然有效。我刚刚做了mat[1,1]
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