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

标签 r lookup-tables

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

所以这代表要修改的original.data...

    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

但我无法找出我的推理错误。

我很想得到一些提示。

谢谢

\\\\问题已解决

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
}

最佳答案

你可以尝试:

# 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

关于R - 使用查找表替换数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22475400/

相关文章:

Javascript Lookup table vs else if 和多个匹配结果

vba - 使用vba宏用两个搜索词(多次查找)搜索Excel

R:如何从早到晚对每天的每小时测量进行排序,并根据此顺序添加一个数字?

python - 使用低级 rpy2 在 python 中创建 R data.frame

sql - 我应该在查找表中使用代码吗

r - 使用多个数据帧和查找表来执行 r 中的功能

db2 - 如何获取转储db2数据库?

r - R 中的矩阵乘法 A^k?

r - 如何增加ggplot2中的条形大小?

r - 搜索数据框的多列