根据R中的值从Matrix返回列名

时间:2017-03-10 20:44:05

标签: r matrix

我有一个矩阵,我想根据值提取列名。在这种情况下,我想要包含小于或等于2的值的任何列的名称(无论该值位于哪一行)。

set.seed(42)
DF <- matrix(sample(1:9,9),ncol=3,nrow=3)
DF <- as.data.frame.matrix(DF)

这就是我所尝试过的(如果矩阵中只有一行,它似乎可以工作)

test<-colnames(DF)[which(DF<=2),]
然后,

test将表示包含值&lt; = 2

的列名

3 个答案:

答案 0 :(得分:2)

1

在列上运行sapply并找到min,然后检查min是否符合您的条件。

colnames(DF)[sapply(DF, min) <= 2]
#[1] "V3"

2

您还可以在列(apply)上运行MARGIN = 2,以查看每列中的any值是否符合所需条件

colnames(DF)[apply(DF, MARGIN = 2, function(a) any(a<=2))]
#[1] "V3"

3

arr.ind = TRUEwhich一起使用。这将给出满足which条件的值的索引。从中,提取列信息[,2]

unique(colnames(DF)[which(DF<=2, arr.ind = TRUE)[,2]])
#[1] "V3"

数据

set.seed(42)
DF <- matrix(sample(1:9,9),ncol=3,nrow=3)
DF <- as.data.frame.matrix(DF)
DF
#  V1 V2 V3
#1  9  5  6
#2  8  4  1
#3  3  7  2

答案 1 :(得分:2)

我们也可以使用colMins/rowMins

中的matrixStats
library(matrixStats)
names(DF)[rowMins(t(DF))<=2]
#[1] "V3"

或使用tidyverse

library(dplyr)
DF %>% 
    summarise_each(funs(min(.) <=2)) %>% 
    unlist %>% 
    names(.)[.]
#[1] "V3"

答案 2 :(得分:0)

我们不需要任何$(function(){ $.fn.isOnScreen = function(){ var win = $(window); var viewport = { top : win.scrollTop(), left : win.scrollLeft() }; viewport.right = viewport.left + win.width(); viewport.bottom = viewport.top + win.height(); var bounds = this.offset(); bounds.right = bounds.left + this.outerWidth(); bounds.bottom = bounds.top + this.outerHeight(); return ( ! ( viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom )); }; /* END $.fn.isOnScreen */ $( "#container" ).scroll(function() { console.log('scrlling'); $.each( $('#container>div'), function(i, left) { console.log(i); var msid = $(left).attr('data-msid'); console.log($(left).attr('data-msid')); console.log($('#first').isOnScreen()); $('.fC[data-msidatrr=]+msid').addClass('active'); }) }); }) /* END $(function() */ 循环。我们可以在条件apply上使用col()的结果的唯一值。

DF <= 2