R:在通过df元素循环时获取索引名

R:在通过df元素循环时获取索引名,r,indexing,dataframe,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

比如说,我有一个数据框,我需要对它的单元格做些什么,并记住我改变了哪些单元格。一种方法是使用两个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)
    }
  }
}

这将消除两个循环

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
df=data.frame(A=c(1,2,3),B=c(4,5,6),c=c(7,8,9))
行名(df)=c('a','b','c'))
更改5,arr.ind=TRUE)

df[changes]这将消除两个循环

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
df=data.frame(A=c(1,2,3),B=c(4,5,6),c=c(7,8,9))
行名(df)=c('a','b','c'))
更改5,arr.ind=TRUE)

df[更改]可能会将初始df与最终df进行比较。如果您的df是数字,则将两者相减,并检查哪些条目不等于0。你应该给我们一份你的数据样本。什么是smt?请给出一个有意义的最小工作示例和预期结果。我怀疑这将在一行代码中解决(使用矢量化方法)。@RomanLuštrik Example addedPerhaps比较初始df和最终df。如果您的df是数字,则将两者相减,并检查哪些条目不等于0。你应该给我们一份你的数据样本。什么是smt?请给出一个有意义的最小工作示例和预期结果。我怀疑这将在一行代码中解决(使用矢量化方法)。@RomanLuštrik示例添加了很多Hanks。这正是我一直在寻找的Hanks。这正是我一直在寻找的