R - 使用查找表替换数据框中的值

时间:2014-03-18 09:40:56

标签: r lookup-tables

我最近在尝试使用查找表替换数据框或矩阵中的特定值时遇到了一些麻烦。

所以这代表了要修改的原始数据......

    V1  V2  V3  V4  V5  V6  V7  V8  V9 V10 V11 V12 V13 V14
1  255 255 255 255 255 255 255 255 255 255 255 255 255 255
2  255 255 255 255 255 255 255 255   3   3 255 255 255 255
3  255 255 255 255 255   1   3   3   3   3   3 255 255 255
4  255 255   5   5   5   1   3   3   4   4   3 255 255 255
5  255   5   5   5   5   1   3   4   4   4   4 255 255 255
6  255   5   5   5   1   3   3   3   4   4   3   3 255 255
7  255 255   5   1   3   3   3   3   6   6   6   3 255 255
8  255 255   1   1   1   1   2   2   3   3   6   3 255 255
9  255 255   1   1   1   2   2   2   2   2   3   3   3 255
10 255 255 255   1   2   2   2   2   2   2   2   3   3 255
11 255 255 255   2   2   2   2   2   7   7   7   2 255 255
12 255 255 255   2   2   8   8   8   7 255 255 255 255 255
13 255 255 255 255   8   8 255 255 255 255 255 255 255 255
14 255 255 255 255 255 255 255 255 255 255 255 255 255 255

...以下可能是lookup.table(rows = 1:9,column1 =" Sub",column2 =" Main"):

  Sub Main
1   1    1
2   2    2
3   3    3
4   4    4
5   5    5
6 255  255
7   6    3
8   7    2
9   8    2

目的是比较例如 original.data[11,11] [7]与lookup.tabel[8,"Sub"] [7]

...并写一个新矩阵 modified.data[11,11]lookup.table[8,"Main"] [2]。 到目前为止,我想到的只是使用for循环和if语句,

for (i in 1:ncol(original.data)){
  for (j in 1:nrow(lookup.table)){
    if (original.data[i,i]==lookup.table[j,1]){
      origingal.data[j,i]<-lookup.table[j,2]
    }
  }
}

导致

Error in origingal.data[j, i] <- lookup.table[j, 2] : 
  object 'origingal.data' not found

但我无法弄清楚我的推理错误。

我喜欢得到一些提示。

由于

\\\\\ PROPEM已解决

for (i in 1:ncol(original.data)){
  for (j in 1:nrow(original.data)){
    for (x in 1:nrow(lookup.table)){
      if (original.data[j,i]==lookup.table[x,1]){
        original.data[j,i]<-lookup.table[x,2]
      }
    } 
  }
}

...有效,但这是一个更快的方法:

for(i in 1:nrow(lookup.table)){
  c<-lookup.table[b,2]
  d<-lookup.table[b,3]
  original.data_modified[original.data == c] <- d
}

1 个答案:

答案 0 :(得分:1)

你可以尝试:

# x the original.data (a matrix)
# y the lookup.table
x2 <- y[match(x, y[,1]),2]
dim(x2) <- dim(x)
table(x, x2)
     x2
x       1   2   3   4   5 255
  1    13   0   0   0   0   0
  2     0  22   0   0   0   0
  3     0   0  29   0   0   0
  4     0   0   0   8   0   0
  5     0   0   0   0  11   0
  6     0   0   4   0   0   0
  7     0   4   0   0   0   0
  8     0   5   0   0   0   0
  255   0   0   0   0   0 100