R:在循环遍历df元素时获取索引名称

时间:2016-12-16 10:39:28

标签: r indexing dataframe

说,我有一个数据框,我需要对其细胞做一些事情,并记住我改变了哪些细胞。一种方法是使用两个for循环遍历索引。但有没有办法用一个循环来做到这一点?

完全我需要这样的东西:

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)
    }
  }
}

1 个答案:

答案 0 :(得分: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]

如果您担心行的顺序与您的示例输出匹配,那么这是一个简单的排序问题