【问题标题】:R - replace values in data frame using lookup tableR - 使用查找表替换数据框中的值
【发布时间】:2014-04-23 21:35:48
【问题描述】:

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

所以这表示要修改的 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
}

【问题讨论】:

  • 这是一个拼写错误,你的数据名称是original.data而不是origingal!!改变它,看看会发生什么。

标签: r lookup-tables


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 2017-12-11
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2017-08-06
    • 2017-11-28
    • 1970-01-01
    • 2016-02-10
    相关资源
    最近更新 更多