我希望编写一个循环来编辑一个数据帧,同时访问另一个数据帧。让我说我有一个名为'master'的数据框设置如下:
ID type1 type2 type3
A 1 0 1
B 0 0 1
C 0 1 1
第二个数据框称为“参考”,设置如下:
Types multiplier
type1 0.33
type2 0.44
type3 0.67
我想在'master'中创建一个新列,它是跨行的数学和乘以数据框'reference'中的'multiplier'值。例如,对于ID“A”,这将是:
master$newcolumn[A] <- (1 * 0.33) + (0 * 0.44) + (1 * 0.67)
我目前尝试这样做是为了将第二个数据帧中的值转换为列表并在第一个数据帧上运行循环,但是我遇到了麻烦。请参阅下面的我的尝试。任何帮助将不胜感激!
type_list <- as.list(reference$Types)
for i in type_list{
master$newcolumn <- sum(master$i * reference$multiplier[reference$Types == i])
}
答案 0 :(得分:0)
我们可以使用crossprod
轻松完成此操作,在使用'reference'的第二列('multiplier')列删除'ID'列后,将输入作为'master'的转置
master$newcolumn <- crossprod(t(master[-1]), reference[,2])
master
# ID type1 type2 type3 newcolumn
#1 A 1 0 1 1.00
#2 B 0 0 1 0.67
#3 C 0 1 1 1.11
或使用%*%
运算符
as.matrix(master[-1]) %*% reference[,2]