2016-12-16 7 views
0

データフレームがあり、そのセルで何かを行い、変更したセルを覚えておく必要があります。 1つの方法は、2つのforループでインデックスをループすることです。しかし、1つのループでこれを行う方法はありますか?R:df要素をループしながらインデックス名を取得

完全に私はこのような何か必要があります:私は必要なものの

changes = data.frame(Row = character(), Col = character()) 
for (cell in df){ 
    if (!(is.na(df))){ 
     cell = do.smt(cell) 
     temp = list(Row = get.row(cell), Col = get.col(cell)) 
     changes = rbind(changes,temp) 
    } 
    } 

例:あなたはフォーマットを使用する場合はこれは両方を取り除く

df = data.frame(A = c(1,2,3), B = c(4,5,6), C = c(7,8,9)) 
rownames(df) = c('a','b','c') 

changes = data.frame(Row = NA, Col = NA) 
for (i in rownames(df)){ 
    for (j in colnames(df)) { 
    if (df[i,j] > 5) { 
     df[i,j] = 0 
     temp = list(Row = i, Col = j) 
     changes = rbind(changes, temp) 
    } 
    } 
} 
+0

はおそらく、最終DFで初期DFを比較し一致していることを懸念している場合、ソートのその単純な問題。 dfが数値の場合は、2つを減算し、どの項目が0でないかを確認します。データのサンプルを提供してください。そしてsmtとは何ですか? – Ansjovis86

+3

意味のある最小の実例と期待される結果を与えてください。私はこれが1行のコードで解決可能であると思われます(ベクトル化手法を使用)。 –

+0

@RomanLuštrikExample added – lotrus28

答えて

2

df = data.frame(A = c(1,2,3), B = c(4,5,6), C = c(7,8,9)) 
rownames(df) = c('a','b','c') 
changes <- which(df > 5, arr.ind=TRUE) 
df[changes] <- 0 

ループ正確に指定された通りにそれを並べ替えることができます

changes <- data.frame(changes,row.names=NULL) 
changes$row <- rownames(df)[changes$row] 
changes$col <- colnames(df)[changes$col] 

、あなたが行の順序があなたの例の出力

+0

ありがとうございました。まさに私が探していたものです – lotrus28

関連する問題