首页 > 解决方案 > 第一行,其中一列中的值高于另一列 R

问题描述

我有一个数据表:

df <- data.table(Points = 1:5, A = c(2,4,6,8,10), B = c(1,3,4,5,9))
df <- 
Points  A B
  1     2 1
  2     4 3
  3     6 4
  4     8 5
  5    10 9

我想要与列 B 中高于 A 列当前值的第一个值相对应的列 Points 的值。

如果 A == 4 的预期输出:

4(B中第一个大于4的值对应的Points值等于4)

标签: rdata.table

解决方案


这个怎么样:

df[, Points[apply(outer(A, B, `<`), 1, function(z) which(z)[1])]]
# [1]  2  4  5  5 NA

诀窍是outer生成一个 5x5 矩阵,其中一行的第TRUE一个列是索引。我试过which.max了,但是在这里的第 5 行,没有找到任何东西,所以which.max(rep(F,5))返回 1,这显然是不对的……而不是which(rep(F,5))[1]返回NA(这里更有意义)。


推荐阅读