2017-01-20 2 views
2

Iは、以下の一つとして、データフレームグリッドdf使用しています:私は発見しようとしていたR:行/ヘッダ名に基づいて、行/列を返すた()を使用する代わり

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」になります。

これまでのところ、行/列の名前が一致しているため、これは問題にはなりませんでした。私は、次の行名/ヘッダを持っている場合しかし、私は最初のグリッドを使用した場合のよう

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 

代わりに、ファイルの行名/ヘッダーを参照する結果が返されますか?私は期待する:

# row col 
# d D 
# d E 

多くのありがとう。

答えて

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]]) 
関連する問題