# [R] new_index

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sat Sep 7 23:24:46 CEST 2019

```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

ID , x, y, z
A, 10,  34, 12
B, 25,  42, 18
C, 14,  20,  8 ", stringsAsFactors = FALSE)

ID, weight
A,  0.25
B,  0.42
C,  0.65 ", stringsAsFactors = FALSE)

Simpler, no?

Hope this helps,

Às 20:23 de 07/09/19, Val escreveu:
> Hi  all
>
> Correction for my previous posting.
> dat2 should be read as
> A,  0.25
> B,  0.42
>
> On Sat, Sep 7, 2019 at 1:46 PM Val <valkremk using 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
>>
>> 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 using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help