[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
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 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
>> 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 using 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.
>
More information about the R-help
mailing list