[R] Multiply

Ivan Krylov kry|ov@r00t @end|ng |rom gm@||@com
Fri Aug 4 17:05:33 CEST 2023


В Fri, 4 Aug 2023 09:54:07 -0500
Val <valkremk using gmail.com> пишет:

> I want to multiply two  data frames as shown below,
> 
> dat1 <-read.table(text="ID, x, y, z
>  A, 10,  34, 12
>  B, 25,  42, 18
>  C, 14,  20,  8 ",sep=",",header=TRUE,stringsAsFactors=F)
> 
> dat2 <-read.table(text="ID, weight, weiht2
>  A,  0.25, 0.35
>  B,  0.42, 0.52
>  C,  0.65, 0.75",sep=",",header=TRUE,stringsAsFactors=F)
> 
> Desired result
> 
> ID  Index1 Index2
> 1  A 24.58 30.18
> 2  B 35.59 44.09
> 3  C 17.10 21.30

You mean as in matrix multiplication? Nice of you to show the desired
result, otherwise I wouldn't be sure what you meant. You can employ the
matrix multiplication operator %*% if you use as.matrix and omit the
non-numeric parts:

as.matrix(dat1[,-1]) %*% as.matrix(dat2[match(dat1[,1], dat2[,1]),-1])
#      weight weiht2
# [1,]  24.58  30.18
# [2,]  35.59  44.09
# [3,]  17.10  21.30

The [,-1] part drops the 'ID' column and the match() on the first
columns of both data frames ensures the correct row order. Omit the
match(...) if you have a guarantee that the samples appear in the same
order (A, B, C) in both dat1 and dat2.

Once the calculation is done, you can construct a data frame again
using something like data.frame(ID = dat1[,1], Index = multiplication).

-- 
Best regards,
Ivan



More information about the R-help mailing list