r - 对于每一行,查找条件下的值

标签 r matrix dplyr apply

从下面的示例中,对于每一行,我试图获取“a”和“b”之间的最小值。

set.seed(1234)
M = matrix(sample(20,20), ncol=4)

   M
     [,1] [,2] [,3] [,4]
[1,]    3   10    7    9
[2,]   12    1    5   17
[3,]   11    4   20   16
[4,]   18    8   15   19
[5,]   14    6    2   13

colnames(M) = c("a","b","a","b")

这就是我想要的

       "a"  "b"
[1,]    3    9
[2,]    5    1
[3,]   11    4
[4,]   15    8
[5,]    2    6

最佳答案

这里有一个选项,通过列名称拆分 data.frame(转换为 data.frame)并获取 pmin每行

sapply(split.default(as.data.frame(M), colnames(M)), function(x) do.call(pmin, x))
#      a b
#[1,]  3 9
#[2,]  5 1
#[3,] 11 4
#[4,] 15 8
#[5,]  2 6

如果我们需要最小值的列号,则使用 max.col

do.call(cbind, lapply(split.default(as.data.frame(M), colnames(M)), 
  function(x) data.frame(Min = do.call(pmin, x), index = max.col(-x))))
#   a.Min a.index b.Min b.index
#1     3       1     9       2
#2     5       2     1       1
#3    11       1     4       1
#4    15       2     8       1
#5     2       2     6       1

关于r - 对于每一行,查找条件下的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49984132/

相关文章:

r - 在 R 中引导逻辑回归后如何做混淆矩阵?

从 R 中的列表中检索每个矩阵的信息

python - 如何使用每行中的特定列从矩阵创建向量,而无需在 Python 中循环?

algorithm - 检查矩阵中元素邻居的最佳方法

r - dplyr错误:组合group_by,mutate和ifelse时出现奇怪的问题。是 bug 吗?

r - 整数向量的区间长度总和

r - 如何控制 R 中旋转(更宽)列的顺序? tidyverse 问题 839

python - 仅使用 numpy 和 pandas 计算转换矩阵中每个单词的频率

用于提取 R dplyr 中 "--!!"之后所有文本的正则表达式

r - R中字符类的计数函数