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 <valkr...@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@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.
______________________________________________
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.