gpt4 book ai didi

r - 查找行式最小值和返回值及其对应的列名

转载 作者:行者123 更新时间:2023-12-04 22:30:03 25 4
gpt4 key购买 nike

考虑以下矩阵 m :

    ca bsa rd zaa
ada 3 4 3 2
aca 1 4 5 2
ara 3 4 3 2
ava 3 4 5 2

我试图为每一行找到最小值并以以下形式返回一个 data.frame:
    q   s d
1 ada zaa 2
2 aca ca 1
3 ara zaa 2
4 ava zaa 2

现在我正在做:
res <- t(sapply(seq(nrow(m)), function(i) {
j <- which.min(m[i,])
c(q = rownames(m)[i],
s = colnames(m)[j],
d = m[i,j])}))

res <- data.frame(res)
res$d <- as.numeric(res$d)

我正在寻找一种更好的方法来构建它。

使用 res 构建 c()(将所有组件强制为相同类型)然后将其转换为 data.frame,最后将 d 更改为 numeric 以获得以下结构,感觉相当低效:
'data.frame':   4 obs. of  3 variables:
$ q: Factor w/ 4 levels "aca","ada","ara",..: 2 1 3 4
$ s: Factor w/ 2 levels "ca","zaa": 2 1 2 2
$ d: num 2 1 2 2

我还需要处理可能有多个最小值的情况

数据
m <- structure(c(3, 1, 3, 3, 4, 4, 4, 4, 3, 5, 3, 5, 2, 2, 2, 2), .Dim = c(4L, 
4L), .Dimnames = list(c("ada", "aca", "ara", "ava"), c("ca", "bsa", "rd", "zaa")))

最佳答案

您可以通过在矩阵的否定版本上使用 max.col 来找到每行最小值的列索引。

col_id <- max.col(-m)
data.frame(q = rownames(m), s = colnames(m)[col_id],
d = m[cbind(1:length(col_id), col_id)])
# q s d
# 1 ada zaa 2
# 2 aca ca 1
# 3 ara zaa 2
# 4 ava zaa 2

关于r - 查找行式最小值和返回值及其对应的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com