首页 文章

R:使用which()基于行/ Headers 名称返回行/列的替代方法

提问于
浏览
2

我正在使用数据框网格 df ,如下所示:

1  2  3  4  5
1  0  0  0  0  0
2  0  0  0  0  0
3  0  4  0  0  0
4  0  0  0  2  2

我试图找到某些值的位置 . 到目前为止,我使用了以下代码:

which(df==2, arr.ind=TRUE)

#  row col
#4   4   4
#4   4   5

但很明显,这会返回值相对于“.csv”文件中单元格的位置,并忽略我导入“.csv”文件时设置为“TRUE”的 Headers 和行 .

到目前为止,这并不是一个问题,因为行/列名称已匹配 . 但是,如果我有以下行名称/ Headers :

A  B  C  D  E
a  0  0  0  0  0
b  0  0  0  0  0
c  0  4  0  0  0
d  0  0  0  2  2

df <- structure(list(A = c(0L, 0L, 0L, 0L), B = c(0L, 0L, 4L, 0L), 
C = c(0L, 0L, 0L, 0L), D = c(0L, 0L, 0L, 2L), E = c(0L, 0L, 
0L, 2L)), .Names = c("A", "B", "C", "D", "E"), class = "data.frame", 
row.names = c("a", "b", "c", "d"))

结果将保持不变,就像我使用第一个网格一样 .

which(df==2, arr.ind=TRUE)

#  row col
#d   4   4
#d   4   5

是否有替代方法返回引用文件的行名称/ Headers 的结果?我预计:

# row col
#   d   D
#   d   E

非常感谢 .

1 回答

  • 2

    你可以用

    ind <- which(df==2, arr.ind=TRUE)
    data.frame(row = row.names(df)[ind[, 1]], col = names(df)[ind[, 2]])
    # cbind(row = row.names(df)[ind[, 1]], col = names(df)[ind[, 2]])
    

相关问题