在我的代码中,我想提取一系列列中的最后一个最大值,在数据帧上按行迭代。问题是我的脚本只给出了具有最大值的第一个匹配项(在本例中为第一列的名称)。关于如何更新此行以获得最后的最大值有什么建议吗?
我的数据框如下所示:
A.trust B.trust C.trust D.trust E.trust F.trust G.trust H.trust I.trust J.trust K.trust L.trust M.trust
-999 -999 -999 -999 -999 -999 -999.0 -999.0 -999.0 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 0.5 -999.0 0.5 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 -999.0 -999.0 1.0 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 -999.0 -999.0 -999.0 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 -999.0 -999.0 -999.0 -999 -999 -999 -999
-999 -999 -999 -999 -999 -999 0.5 0.5 -999.0 -999 -999 -999 -999
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码
# return cols which hold maximum
nams <- names(test)[apply(test, 1 ,which.max)]
Run Code Online (Sandbox Code Playgroud)
目前,nams
变量中的值为:
"A.trust"
"G.trust"
"I.trust"
"A.trust"
"A.trust"
"G.trust"
Run Code Online (Sandbox Code Playgroud)
我所需的变量值nams
是这样的:
"M.trust"
"I.trust"
"I.trust"
"M.trust"
"M.trust"
"H.trust"
Run Code Online (Sandbox Code Playgroud)
test = structure(list(A.trust = c(-999, -999, -999, -999, -999, -999),
B.trust = c(-999, -999, -999, -999, -999, -999),
C.trust = c(-999, -999, -999, -999, -999, -999),
D.trust = c(-999, -999, -999, -999, -999, -999),
E.trust = c(-999, -999, -999, -999, -999, -999),
F.trust = c(-999, -999, -999, -999, -999, -999),
G.trust = c(-999, 0.5, -999, -999, -999, 0.5),
H.trust = c(-999, -999, -999, -999, -999, 0.5),
I.trust = c(-999, 0.5, 1, -999, -999, -999),
J.trust = c(-999, -999, -999, -999, -999, -999),
K.trust = c(-999, -999, -999, -999, -999, -999),
L.trust = c(-999, -999, -999, -999, -999, -999),
M.trust = c(-999, -999, -999, -999, -999, -999)),
row.names = 600:605, class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
以下帖子与我的问题相关,但我正在努力解决如何在我的脚本中进行此更改如何在 R 中的分组数据中查找某个观察结果的最后一次出现?。这是另一篇相关文章which.max ties R中的方法。任何帮助将不胜感激!
names(rev(test))[apply(rev(test), 1, which.max)]
[1] "M.trust" "I.trust" "I.trust" "M.trust" "M.trust" "H.trust"
Run Code Online (Sandbox Code Playgroud)