根据R中的条件获取data.frame的行和列名称

时间:2015-01-30 20:55:34

标签: r

这可能比我做起来容易得多。这是困扰你的小问题之一,你想知道为什么。

给出数据框如下:

a <- c(1,2,3)
b <- c(4,5,6)
test.df <- data.frame(a,b)

如果值='1',如何使用迭代遍历每列中的值并返回列名和行名?

这样的事情:

for (i in test.df) {
    for (j in i) {
        if (i == 1) {
            print(rowname,columnname)
            }
        }
    }  
}  

其中rowname和columnname是实际值。

3 个答案:

答案 0 :(得分:8)

使用whicharr.ind=T是一种方式:

示例数据

a <- c(1,2,3)
b <- c(4,5,6)
test.df <- data.frame(a,b)

解决方案和输出

#test.df==1 gives a TRUE/FALSE matrix
#which with the arr.ind argument=TRUE gives the row/col of the TRUE elements
a <- which(test.df==1,arr.ind=T)

> a
     row col
[1,]   1   1

然后使用上面的方法获取行名和列名:

> row.names(test.df[a[,1],] ) #row names
[1] "1"

> names(test.df[a[,2]])       #column names
[1] "a"

答案 1 :(得分:3)

另一种方法:

> col = colnames(test.df)[apply(test.df, 2, function(u) any(u==1))]
> col
[1] "a"
> row = row.names(test.df)[apply(test.df, 1, function(u) any(u==1))]
> row
[1] "1"

答案 2 :(得分:1)

这是一个旧线程,但是我对以前的解决方案不是很满意。

对我来说,最直观的是:

row.names(data)[which(data$feature1==value)]

基本上是这样说的:给定所有数据的行名,就可以得到满足给定条件的行。