这可能比我做起来容易得多。这是困扰你的小问题之一,你想知道为什么。
给出数据框如下:
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是实际值。
答案 0 :(得分:8)
使用which
和arr.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)]
基本上是这样说的:给定所有数据的行名,就可以得到满足给定条件的行。