我有两个从矩阵转换的表:
Table 1:
Column1 Column2 Value
1 A 3
1 B 4
1 C 5
2 A 1
2 B 2
2 C 3
Table 2
Column1 Column2 Value
1 C 5
2 C 1
2 B 2
如果它们具有相同的标准,我希望从这两个表中得到多个值。例如:
If [Table1[Column1] == Table2[Column1] AND Table1[Column2]==Table2[Column2]
THEN Table1[Value] <- Table1[Value]*Table2[Value]
预期产出:
Table 1:
Column1 Column2 Value
1 A 3
1 B 4
1 C 5*5 - from table 2
2 A 1
2 B 2*2 from table 2
2 C 3*1 - from table 2
我尝试了几天创建脚本,但我有很多问题。
答案 0 :(得分:2)
首先,我们合并,然后我们乘以
names(table2)[3] <- 'Value2'
table3 <- merge(table1, table2, all.x = TRUE)
table3$Value <- with(table3, ifelse(is.na(Value2), Value, Value * Value2))
答案 1 :(得分:0)
我们可以进行连接,然后进行乘法
library(data.table)
setDT(Table1)[Table2, Value := Value * i.Value, on = .(Column1, Column2)]
Table1
# Column1 Column2 Value
#1: 1 A 3
#2: 1 B 4
#3: 1 C 25
#4: 2 A 1
#5: 2 B 4
#6: 2 C 3
注意:解决方案分配值并且非常快
Table1 <- structure(list(Column1 = c(1L, 1L, 1L, 2L, 2L, 2L), Column2 = c("A",
"B", "C", "A", "B", "C"), Value = c(3L, 4L, 5L, 1L, 2L, 3L)), .Names = c("Column1",
"Column2", "Value"), class = "data.frame", row.names = c(NA,
-6L))
Table2 <- structure(list(Column1 = c(1L, 2L, 2L), Column2 = c("C", "C",
"B"), Value = c(5L, 1L, 2L)), .Names = c("Column1", "Column2",
"Value"), class = "data.frame", row.names = c(NA, -3L))