我有一个数据框,问题是我想在一行中找到两个最大值,然后将这些值与这些列中另一行的值进行比较。
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个值(并且顺序相同)。
答案 0 :(得分:2)
1) order
应用于行a
给出向量,当向量用作其参数的索引时将按排序顺序给出向量,因此将其应用于行{{ 1}},并获取最后2个元素。
e
2)如果问题中显示的结果是s,则另一种可能性是按其名称索引o <- order( df["a", ] )
tail(unlist( df["e", o] ), 2)
## x2 x3
## 7 7
。
df
答案 1 :(得分:0)
我对r不熟悉,但是从理论上讲,您需要一种算法,该算法根据a的两个最高值交换整个列。
之后,要比较的其他行中的值将始终位于第1列和第2列。