我有一个包含类别和值的数据框。基于类别我想要减去存储在另一个表中的值。
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'是一个命名向量,但它可以更改为更适合的数据格式。
我不知道如何做到这一点...
答案 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匹配”来浏览其中一些内容(您可以通过将搜索字词括在方括号中来搜索特定标记,例如"[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