R中的条件计算

时间:2013-10-28 18:11:44

标签: r lookup

我有一个包含类别和值的数据框。基于类别我想要减去存储在另一个表中的值。

myframe <- data.frame(
         x = factor(c("A", "D", "A", "C")), 
         y = c(8, 3, 9, 9))

reference <- c('A'= 1, 'B'= 2, 'C'= 3, 'D'= 4)  

期望的(y-ref)结果将是:

result <- data.frame(
         x = factor(c("A", "D", "A", "C")), 
         y = c(8, 3, 9, 9),
         r = c(7, -1, 8, 6))

      x y  r
    1 A 8  7        
    2 D 3 -1
    3 A 9  8
    4 C 9  6

在这种情况下,引用'table'是一个命名向量,但它可以更改为更适合的数据格式。

我不知道如何做到这一点...

2 个答案:

答案 0 :(得分:2)

使用match[ ...

这是一项相当简单的任务
myframe$r <- myframe$y - reference[ match( myframe$x , names( reference ) ) ]
#  x y  r
#1 A 8  7
#2 D 3 -1
#3 A 9  8
#4 C 9  6

非常确定这是一个(几次)重复,所以我们应该找到一个好的指针并关闭问题(但我赞赏你显示输入数据和期望的结果,许多问题往往没有很好的布局)

修改

网站上有很多很多 match的问题。很难选择一个指向一个完全重复的东西。但我建议您通过搜索“匹配”来浏览其中一些内容(您可以通过将搜索字词括在方括号中来搜索特定标记,例如"[r]")。

答案 1 :(得分:1)

data.table方式:

library(data.table)

# convert to data.table and set key for the upcoming merge
dt = data.table(myframe, key = 'x')
ref = data.table(x = names(reference), val = reference)

# merge and add a new column
dt[ref, r := y - val]
dt
#   x y  r
#1: A 8  7
#2: A 9  8
#3: C 9  6
#4: D 3 -1