我有一个矩阵,我想根据值提取列名。在这种情况下,我想要包含小于或等于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
的列名答案 0 :(得分:2)
在列上运行sapply
并找到min
,然后检查min
是否符合您的条件。
colnames(DF)[sapply(DF, min) <= 2]
#[1] "V3"
您还可以在列(apply
)上运行MARGIN = 2
,以查看每列中的any
值是否符合所需条件
colnames(DF)[apply(DF, MARGIN = 2, function(a) any(a<=2))]
#[1] "V3"
将arr.ind = TRUE
与which
一起使用。这将给出满足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