提取行名称,基于行中小于特定值的所有元素

时间:2016-06-14 16:00:37

标签: r

我有一个如下所示的数据框:

a <- c(1.2,1.19,1.1,1.09,1.09)
b <- c(1.2, 1.18,1.12,1.11, 1.09)
d<- data.frame(a,b)
rownames(d) <- c('450','500','899','1004','1112')

        a    b
450  1.20 1.20
500  1.19 1.18
899  1.10 1.12
1004 1.09 1.11
1112 1.09 1.09

我想编写一个简短函数或单行代码,它将返回行的行名称,其中该行中的所有值(在本例中为ab的值)为< em> all 小于值1.1。此条件仅在此数据框的最后一行中满足,行名称为1112。注意,解决方案必须概括,以便它可以在可能更多的列上运行,并且可以在具有更多行的数据帧上运行。

2 个答案:

答案 0 :(得分:5)

这是获得所需结果的通用矢量化方法:

rownames(d[rowSums(d < 1.1) == ncol(d),])
#[1] "1112"

答案 1 :(得分:3)

使用VBA的此功能应该有效:

apply

这里,rownames是使用逻辑向量的子集。 rownames(d)[apply(d, 1, function(x) all(x < 1.1))] 循环遍历每一行,并使用apply检查所有条目是否都小于1.1。

你可以将它包装在一个函数中,如下所示:

all