如何解决如何为数据帧的每一行找到最小值的索引?
假设我有一个像 Private Function RunApplicationFunction(Name As String,Value As Variant) As Variant
On Error GoTo TryUniqueName
Set RunApplicationFunction = Application.Run(Name,Value)
Exit Function
' In MS Access we catch Error 2517 and try to call the function with the application/module name prefixed to it
' So WebHelpers.ParseXML becomes WebHelpers_ParseXML
TryUniqueName:
If Err.Number = 2517 And Application.Name = "Microsoft Access" And InStr(Name,".") > 0 Then
Set RunApplicationFunction = Application.Run(Replace(Name,".","_"),Value)
Else
Err.Raise Err.Number
End If
End Function
这样的数据框
df
我想为 [,1] [,2] [,3] [,4]
x 1 2 7 1
y 1 5 1 5
的每一行找到最小值的索引。我的预期结果是
df
我试过了
YES NO NO NO YES
YES NO YES NO No
但它不起作用。你能详细说明一下怎么做吗?
解决方法
试试
#Code
X==apply(X,1,min)
输出:
X==apply(X,min)
V2 V3 V4 V5
x TRUE FALSE FALSE TRUE
y TRUE FALSE TRUE FALSE
使用的一些数据:
#Data
X <- structure(c(1L,1L,2L,5L,7L,5L),.Dim = c(2L,4L),.Dimnames = list(
c("x","y"),c("V2","V3","V4","V5")))
,
我们可以使用apply
来遍历行(MARGIN =1
),将行中的元素与行的min
进行比较
t(apply(df,function(x) x == min(x)))
-输出
# [,1] [,2] [,3] [,4]
#x TRUE FALSE FALSE TRUE
#y TRUE FALSE TRUE FALSE
或者使用 rowMins
中的 matrixStats
使其紧凑
library(matrixStats)
df == rowMins(df)
# [,4]
#x TRUE FALSE FALSE TRUE
#y TRUE FALSE TRUE FALSE
或者,如果我们想坚持使用 base R
并使用矢量化选项,那么 pmin
是另一种方式(在将 matrix
转换为 data.frame
之后)
df == do.call(pmin,as.data.frame(df))
,
使用 Reduce
+ pmin
的基本 R 选项(最好使用 do.call
(而不是 Reduce
)作为 @akrun 在涉及更多列时呈现,从速度的角度来看,因为 Reduce
会慢得多。)
Reduce(pmin,data.frame(df)) == df
给予
[,4]
x TRUE FALSE FALSE TRUE
y TRUE FALSE TRUE FALSE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。