【问题标题】:Finding two highest value in a row and then values in the same column but different row在一行中查找两个最高值,然后在同一列但不同行中查找值
【发布时间】:2020-01-28 15:53:32
【问题描述】:

我有一个数据框,问题是我想在一行中找到两个最高值,然后将这些值与另一行在这些列中的值进行比较。


rows <- c("a","b","c","d","e","f","g","h","i")
x1 <- c(1,4,5,7,5,8,9,0,5)
x2 <- c(3,3,5,6,7,8,9,0,7)
x3 <- c(3,1,4,6,7,8,9,5,2)


df <- data.frame(x1=x1,x2=x2, x3=x3, row.names = rows)

这里我从“a”行得到两个最高值

sort(df["a",], decreasing = TRUE)[1:2]

然后我想在“e”行中查找属于这些列的值,其中“a”具有前 2 个值(并且顺序相同)。

【问题讨论】:

  • 输出应该是什么?
  • 例如,如果行是“a”和“e”,输出应该是 3 3 7 7

标签: r


【解决方案1】:

我对 r 不熟悉,但从理论上讲,您需要一种算法,该算法根据 a 的两个最高值交换整个列。

之后,您要比较的其他行中的值将始终位于第 1 列和第 2 列。

【讨论】:

  • 如果你想发表这篇文章,它应该作为评论。答案需要解决问题的代码。
【解决方案2】:

1) order 应用于行 a 给出向量,当用作其参数的索引时,将按排序顺序将其应用于行 e 并取最后 2 个元素。

o <- order( df["a", ] )
tail(unlist( df["e", o] ), 2)
## x2 x3 
##  7  7 

2) 如果 s 是问题中显示的结果,另一种可能性是按名称索引 df

s <- sort(df["a",], decreasing = TRUE)[1:2]
df["e", names(s)]
## x2 x3 
##  7  7 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2014-09-04
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多