通过匹配R

时间:2016-02-15 11:11:17

标签: r

我有一个看起来像这样的数据框

> data
  A B
1 1 2
2 2 1

我有一个看起来像这样的参考数据框

> ref
  Names Values
1     A      5
2     B     10

我想将每一列乘以具有相同名称的Ref中的相应行

结果应该是这个

> result
   A  B
1  5 20
2 10 10

在R中实现这一目标的最快方法是什么?任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

我们可以match'数据'列的'数字'与'ref'的'名称'列,根据数字索引得到相应的'值',然后乘以复制ref$Values < / p>

data*ref$Values[match(names(data), ref$Names)][col(data)]
#   A  B
#1  5 20
#2 10 10

答案 1 :(得分:1)

如果您在Names中使用rownames代替ref,那么您也可以这样做

rownames(ref) <- ref$Names #assign rownames
ref$Names <- NULL #drop col

i <- intersect(rownames(ref), colnames(data)) #find intersect
mapply(`*`, ref[i, ], data[, i]) #perform multiplication
#     [,1] [,2]
#[1,]    5   20
#[2,]   10   10

答案 2 :(得分:0)

这应该有效:

for (n in seq(along = names(data))) {
    data[,n] <- data[,n] * ref$Values[which(ref$Names == names(data)[n])]
}