Hi All, I have two data frames with thousand rows and several columns. My samples of the data frames are shown below dat1 <-read.table(text="ID, x, y, z 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, x, y, z ID, weight A, 0.25 B, 0.42 C, 0.65 ",sep=",",header=TRUE,stringsAsFactors=F) My goal is to create an index value for each ID by mutliplying the first row of dat1 by the second column of dat2. (10*0.25 ) + (34*0.42) + (12*0.65)= 24.58 (25*0.25 ) + (42*0.42) + (18*0.65)= 35.59 (14*0.25 ) + (20*0.42) + ( 8*0.65)= 19.03 The desired out put is dat3 ID, Index A 24.58 B 35.59 C 19.03 How do I do it in an efficent way? Thank you,
Hi all Correction for my previous posting. dat2 should be read as dat2 <-read.table(text="ID, weight A, 0.25 B, 0.42 C, 0.65 ",sep=",",header=TRUE,stringsAsFactors=F) On Sat, Sep 7, 2019 at 1:46 PM Val <valkremk at gmail.com> wrote:> > Hi All, > > I have two data frames with thousand rows and several columns. My > samples of the data frames are shown below > > dat1 <-read.table(text="ID, x, y, z > 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, x, y, z > ID, weight > A, 0.25 > B, 0.42 > C, 0.65 ",sep=",",header=TRUE,stringsAsFactors=F) > > My goal is to create an index value for each ID by mutliplying the > first row of dat1 by the second column of dat2. > > (10*0.25 ) + (34*0.42) + (12*0.65)= 24.58 > (25*0.25 ) + (42*0.42) + (18*0.65)= 35.59 > (14*0.25 ) + (20*0.42) + ( 8*0.65)= 19.03 > > The desired out put is > dat3 > ID, Index > A 24.58 > B 35.59 > C 19.03 > > How do I do it in an efficent way? > > Thank you,
dat1 is wrong also. It should read: 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) Is this a homework problem? This list has a no homework policy. Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Sat, Sep 7, 2019 at 12:24 PM Val <valkremk at gmail.com> wrote:> Hi all > > Correction for my previous posting. > dat2 should be read as > dat2 <-read.table(text="ID, weight > A, 0.25 > B, 0.42 > C, 0.65 ",sep=",",header=TRUE,stringsAsFactors=F) > > On Sat, Sep 7, 2019 at 1:46 PM Val <valkremk at gmail.com> wrote: > > > > Hi All, > > > > I have two data frames with thousand rows and several columns. My > > samples of the data frames are shown below > > > > dat1 <-read.table(text="ID, x, y, z > > 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, x, y, z > > ID, weight > > A, 0.25 > > B, 0.42 > > C, 0.65 ",sep=",",header=TRUE,stringsAsFactors=F) > > > > My goal is to create an index value for each ID by mutliplying the > > first row of dat1 by the second column of dat2. > > > > (10*0.25 ) + (34*0.42) + (12*0.65)= 24.58 > > (25*0.25 ) + (42*0.42) + (18*0.65)= 35.59 > > (14*0.25 ) + (20*0.42) + ( 8*0.65)= 19.03 > > > > The desired out put is > > dat3 > > ID, Index > > A 24.58 > > B 35.59 > > C 19.03 > > > > How do I do it in an efficent way? > > > > Thank you, > > ______________________________________________ > R-help at 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. >[[alternative HTML version deleted]]
Hello, The problem itself is simple: i <- match(dat1$ID, dat2$ID) colSums(t(dat1[i, -1])*dat2[i, -1]) # 1 2 3 #24.58 35.59 17.10 But both dat1 and dat2 are wrong and can be read with read.csv dat1 <- read.csv(text = " ID , x, y, z A, 10, 34, 12 B, 25, 42, 18 C, 14, 20, 8 ", stringsAsFactors = FALSE) dat2 <- read.csv(text=" ID, weight A, 0.25 B, 0.42 C, 0.65 ", stringsAsFactors = FALSE) Simpler, no? Hope this helps, Rui Barradas ?s 20:23 de 07/09/19, Val escreveu:> Hi all > > Correction for my previous posting. > dat2 should be read as > dat2 <-read.table(text="ID, weight > A, 0.25 > B, 0.42 > C, 0.65 ",sep=",",header=TRUE,stringsAsFactors=F) > > On Sat, Sep 7, 2019 at 1:46 PM Val <valkremk at gmail.com> wrote: >> >> Hi All, >> >> I have two data frames with thousand rows and several columns. My >> samples of the data frames are shown below >> >> dat1 <-read.table(text="ID, x, y, z >> 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, x, y, z >> ID, weight >> A, 0.25 >> B, 0.42 >> C, 0.65 ",sep=",",header=TRUE,stringsAsFactors=F) >> >> My goal is to create an index value for each ID by mutliplying the >> first row of dat1 by the second column of dat2. >> >> (10*0.25 ) + (34*0.42) + (12*0.65)= 24.58 >> (25*0.25 ) + (42*0.42) + (18*0.65)= 35.59 >> (14*0.25 ) + (20*0.42) + ( 8*0.65)= 19.03 >> >> The desired out put is >> dat3 >> ID, Index >> A 24.58 >> B 35.59 >> C 19.03 >> >> How do I do it in an efficent way? >> >> Thank you, > > ______________________________________________ > R-help at 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. >