В Fri, 4 Aug 2023 09:54:07 -0500 Val <valkr...@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 ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.