在R中将两个数据集相乘

用户9292

我有两个具有公共列的数据框。

  # 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行。同样,每个数据帧中相似的列名并不意味着两个列的值都相同。

这是我想做的:

  1. 由于DF1有5行,因此我需要在其中创建5列DF2,我们称它们为y1, y2, y3, y4, y5

  2. 这是计算方法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 ... Etc的第二行开始。

在向量和矩阵方面,这是如何计算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的第十个值是:

y110 = x01 + x21(DF1)* x210(DF2)+ x31(DF1)* x310(DF2)+ x71(DF1)* x710(DF2)+ x91(DF1)* x910(DF2)。

如何实现我的算法?

哈克

这是基于我对您想做什么的理解,我在评论中提到了这一点。

基本上,对于我中的非常见列,dat1将它们乘以一个矢量,以使其达到一致的维数,然后逐行为每个yy1,等)相加10x1矢量,因此每个都是10x1矢量:

common_cols <- intersect(colnames(dat1),colnames(dat2))
uniq_cols   <- setdiff(colnames(dat1),colnames(dat2))
uniq_cols   <- uniq_cols[!uniq_cols=="ID1"]

tmp  <- data.frame(y1=rep(NA,10), y2=rep(NA,10),y3=rep(NA,10),y4=rep(NA,10),y5=rep(NA,10))
tmp1 <- data.frame(matrix(nrow=10, ncol = 7))

for(i in 1:nrow(dat1)){
  for(j in 1:length(common_cols)){
    tmp1[,j] <-  dat1[i,common_cols[j]] * dat2[,common_cols[j]] 
  }
  for(k in 1:length(uniq_cols)){
    tmp1[,k+4] <- dat1[i,uniq_cols[k]]*rep(1,10)
  }
  tmp[,i] <- rowSums(tmp1)
}

结果是:

tmp
         y1          y2        y3        y4         y5
1  2796.812   226.31244 1924.2130 4392.7841  1459.8979
2  1786.241    17.11732  716.6079 2044.0003   141.6572
3  1371.890  -334.09190  324.3946 1578.0200  -262.0858
4  1235.717  -446.01583  176.2845 1422.1088  -411.2424
5  1995.976  -377.33202 1152.6527 3297.5986   635.7040
6  2233.255   197.51252 1155.2367 2847.4433   599.1098
7  3437.539  1675.03212 2328.7100 3876.5423  1914.7753
8   291.687 -1331.27575 -737.9568  299.7451 -1413.6779
9  1659.648  -244.14992  678.3120 2266.3193   144.3870
10 1675.775  -532.41657  668.3817 2491.0892    60.3962

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中将两个数据帧相乘并合并

来自分类Dev

在R中将两个数据帧相乘并合并

来自分类Dev

跨两个数据帧相乘

来自分类Dev

如何在Ruby中将两个数组相乘?

来自分类Dev

在R中将两个数据框做成相同的形式

来自分类Dev

比较R中的两个数据集

来自分类Dev

在条件中合并R中的两个数据集

来自分类Dev

使用R中的两个数据集创建散点图

来自分类Dev

两个数相乘的算法

来自分类Dev

基于 R 中的两个变量和两个数据集替换值

来自分类Dev

合并两个数据集

来自分类Dev

合并两个数据集

来自分类Dev

两个数据集的excel比较

来自分类Dev

减去两个数据框的并集

来自分类Dev

两个数据集之间的重叠

来自分类Dev

在R中将两个数组转换为一个数据帧

来自分类Dev

Foreach遍历两个数据集,并对两个数据集使用相同的循环索引

来自分类Dev

如何在 C++ 中将两个数组相乘并重复加法?

来自分类Dev

Java在两个数字之间相乘

来自分类Dev

在C ++中将两个矩阵相乘

来自分类Dev

如何使用dplyr * _join()函数的两个“ by”参数在R中组合两个数据集?

来自分类Dev

我有两个数据集,需要将一个数据集列中的字符串与 R 中的其他数据集列合并

来自分类Dev

R-比较两个数据集时如何避免循环?

来自分类Dev

将R中的两个数据集与条件覆盖和编码动量交易相结合

来自分类Dev

两个数据集之间在R中的近似字符串匹配

来自分类Dev

用r中的两个数据集将线拟合到qqplot

来自分类Dev

如何在R中识别唯一ID和两个数据集的重叠

来自分类Dev

根据R中的时间间隔合并两个数据集

来自分类Dev

如何合并R中具有不同列名的两个数据集?

Related 相关文章

热门标签

归档