【发布时间】:2016-12-23 15:52:18
【问题描述】:
我有两个具有公共列的数据框。
# Generate DF1
set.seed(219)
x0 <- rnorm(5, 22, 17)
x2 <- rnorm(5, 44, 15)
x3 <- rnorm(5, 56, 13)
x7 <- rnorm(5, 0, 3)
x9 <- rnorm(5, 28, 31)
x10 <- rnorm(5, 4, 75)
x11 <- rnorm(5, 7, 1)
dat1 <- data.frame(x0,x2,x3,x7,x9, x10, x11)
dat1$ID1 <- rownames(dat1)
# Generate DF2
x1 <- rnorm(10, 2, 19)
x2 <- rnorm(10, 4, 18)
x3 <- rnorm(10, 5, 17)
x4 <- rnorm(10, 7, 16)
x5 <- rnorm(10, 8, 51)
x6 <- rnorm(10, 9, 5)
x7 <- rnorm(10, 0, 3)
x8 <- rnorm(10, 34, 2)
x9 <- rnorm(10, 28, 1)
dat2 <- data.frame(x1,x2,x3,x4,x5,x6,x7,x8,x9)
dat2$ID2 <- rownames(dat2)
请注意,DF1 有 5 行,而DF2 有 10 行。此外,每个数据框中的相似列名称并不意味着两列的值相同。
这是我想做的:
由于
DF1有5 行,我需要在DF2中创建5 列,我们称它们为y1, y2, y3, y4, y5。-
这是计算
y1的方法:我需要将DF1中的第一行与DF2中的所有行相乘。y1的大小将是(10 行和 1 列)。我需要为 DF2 中的每一行计算以下内容。y1 = x0 + x2(DF1)*x2(DF2) + x3(DF1)*x3(DF2) + x7(DF1)*x7(DF2) + x9(DF1)*x9(DF2)
同样,对于y2,我们需要从DF1的第二行开始...等
就向量和矩阵而言,这是计算 y1 的方法。
设 DF1 中的第一行为 (x01, x21, x31, x71, x91, x101, x111, ID11)。然后是 y1 的第一个值(记住 y1 是 10*1):
y11 = x01 + x21(DF1)*x21(DF2) + x31(DF1)*x31(DF2) + x71(DF1)*x71(DF2) + x91(DF1)*x91(DF2)。
y1的第二个值:
y12 = x01 + x21(DF1)*x22(DF2) + x31(DF1)*x32(DF2) + x71(DF1)*x72(DF2) + x91(DF1)*x92(DF2)。
...
最后,y1的第10个值是:
y110 = x01 + x21(DF1)*x210(DF2) + x31(DF1)*x310(DF2) + x71(DF1)*x710(DF2) + x91(DF1)*x910(DF2)。
如何实现我的算法?
【问题讨论】:
-
那么,
x0是否会是常数 'y2'、'y3' 等。即,公式对于 'y2'、'y3' 等是否不同 -
正确。因为 DF2 没有 x0.... 我可以将 DF2 中的 x0 添加为 1,然后执行 x0(DF1)*x0(DF2)。
-
还有一个疑问,所以DF1中'x2'的第一行将乘以'DF2'中'x2'的所有行?
-
DF1 中的 x2 是一个数字,我需要为 DF2 中的每个 x2 乘以它。
-
我也有同样的疑问/困惑。我认为这里的逻辑不太对劲。如果我们将 dat1 中的 1 个公共列的 1 行与 dat2 中该列的所有行相乘,那么长度将为 10x1。但是,您说的是 将 dat1 的唯一列添加到 all 4 个公共列的 10x1 乘积中,我不知道这如何适用于 10x1 向量.也许你可以给出一个逐步计算 y1 的例子。
标签: r