1 つのデータ セットの列の各要素を 2 番目のデータ セットの列の各要素で乗算し、結果をマージして新しいデータ セットを形成したいと考えています。以下の例では、 の各値を のmy.data1$zz
各値で乗算しmy.data2$cc
て を取得してdesired.result$dd
います。
apply
ステートメントを使用してc()
、結果の出力をベクトルに変換します。ただし、ベクターmy.data4
をmy.data1
とをマージしてmy.data2
を作成するのに問題がありますdesired.result
。これまでで最も近いのは、で失敗した後new.data
に作成したです。rep
merge
確かに私は簡単な解決策を見逃しています。apply
家族のメンバーの使い方やmerge
入手方法についてアドバイスをよろしくお願いしますdesired.result
。base を使用することを好み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