我想將一個數據集中的列中的每個元素乘以第二個數據集中的列中的每個元素,然後合併結果以形成新的數據組。在下面的示例中,我將my.data1$zz
的每個值乘以my.data2$cc
的每個值以獲得desired.result$dd
。第二列中的每個元素在一列中的每個元素的多元化
我使用apply
語句,然後使用c()
將結果輸出轉換爲向量。但是,我無法合併矢量my.data4
與my.data1
和my.data2
以創建desired.result
。我到目前爲止最接近的是new.data
,這是我在用merge
失敗後用rep
創建的。
當然,我錯過了一個簡單的解決方案。感謝您對如何使用apply
系列的成員或merge
獲得desired.result
的任何建議。我更喜歡使用基地R
。
my.data1 <- read.table(text = '
xx yy zz
A 1 100
A 2 200
B 1 1000
B 2 2000
', header = TRUE)
my.data2 <- read.table(text = '
aa bb cc
1 1 0.40
1 0 0.30
0 1 0.20
0 0 0.10
', header = TRUE)
desired.result <- read.table(text = '
xx yy zz aa bb cc dd
A 1 100 1 1 0.4 40
A 1 100 1 0 0.3 30
A 1 100 0 1 0.2 20
A 1 100 0 0 0.1 10
A 2 200 1 1 0.4 80
A 2 200 1 0 0.3 60
A 2 200 0 1 0.2 40
A 2 200 0 0 0.1 20
B 1 1000 1 1 0.4 400
B 1 1000 1 0 0.3 300
B 1 1000 0 1 0.2 200
B 1 1000 0 0 0.1 100
B 2 2000 1 1 0.4 800
B 2 2000 1 0 0.3 600
B 2 2000 0 1 0.2 400
B 2 2000 0 0 0.1 200
', header = TRUE)
my.data3 <- apply(my.data1[3], 1, function(x) x * my.data2$cc)
my.data4 <- c(my.data3)
# [1] 40 30 20 10 80 60 40 20 400 300 200 100 800 600 400 200
my.data5 <- cbind(my.data1, my.data2)
new.xx <- rep(c('A','B'), each = length(my.data4)/2)
new.yy <- rep(rep(c( 1, 2), each = length(my.data4)/4), 2)
new.ab <- expand.grid(aa = c(0,1), bb = c(0,1))
new.ab <- new.ab[order(-new.ab$aa, -new.ab$bb),]
new.ab2 <- rbind(new.ab, new.ab, new.ab, new.ab)
new.data <- data.frame(xx = new.xx, yy = new.yy, aa = new.ab2$aa, bb = new.ab2$bb, dd = my.data4)
new.data
xx yy aa bb dd
1 A 1 1 1 40
2 A 1 1 0 30
3 A 1 0 1 20
4 A 1 0 0 10
5 A 2 1 1 80
6 A 2 1 0 60
7 A 2 0 1 40
8 A 2 0 0 20
9 B 1 1 1 400
10 B 1 1 0 300
11 B 1 0 1 200
12 B 1 0 0 100
13 B 2 1 1 800
14 B 2 1 0 600
15 B 2 0 1 400
16 B 2 0 0 200