CopyPastor

Detecting plagiarism made easy.

Score: 0.8097330927848816; Reported for: String similarity Open both answers

Possible Plagiarism

Plagiarized on 2019-06-17
by chinsoon12

Original Post

Original - Posted on 2019-04-16
by sindri\_baldur



            
Present in both answers; Present only in the new answer; Present only in the old answer;

Here is another possible approach:
#ensure that order is correct before using the most recent for each company setorder(table2, individual_id, company_id, date2)
table1[, mean_alpha := #perform non-equi join table2[table1, on=.(individual_id, date2<=date), #for each row of table1, by=.EACHI, #get most recent alpha by company_id and average the alphas mean(.SD[, last(alpha), by=.(company_id)]$V1)]$V1 ]
output:
individual_id date mean_alpha 1: 1 2018-01-02 1.00 2: 1 2018-01-04 1.50 3: 1 2018-01-05 1.25 4: 2 2018-01-02 1.50 5: 2 2018-01-05 3.00
data:
library(data.table) table1 <- fread( "individual_id | date 1 | 2018-01-02 1 | 2018-01-04 1 | 2018-01-05 2 | 2018-01-02 2 | 2018-01-05", sep ="|" ) table1[, date := as.IDate(date)] table2 <- fread( "individual_id | date2 | company_id | alpha 1 | 2018-01-02 | 62 | 1 1 | 2018-01-04 | 62 | 1.5 1 | 2018-01-05 | 63 | 1 2 | 2018-01-01 | 71 | 2 2 | 2018-01-02 | 74 | 1 2 | 2018-01-05 | 74 | 4", sep = "|" ) table2[, date2 := as.IDate(date2)]

Using `by = .EACHI` you could do something like the following:
table2[table1, on = .(`individual id`), .(date = i.date, mean_alpha = mean(alpha[date2 <= i.date])), by = .EACHI]
# individual id date mean_alpha # 1: 1 2018-01-02 1.0 # 2: 1 2018-01-03 1.0 # 3: 2 2018-01-02 1.5 # 4: 2 2018-01-03 1.5
*Edit:*
# Assign by reference as a new column table1[, mean_alpha := table2[table1, on = .(`individual id`), mean(alpha[date2 <= i.date]), by = .EACHI][["V1"]]]
*Edit 2*:
Here is slightly more elegant way suggested by Frank in the comment section.
# In this solution our date columns can't be type character table1[, date := as.Date(date)] table2[, date2 := as.Date(date2)]
table1[, mean_alpha := table2[table1, # or equivalently .SD instead of table1 on = .(`individual id`, date2 <= date), mean(alpha), by = .EACHI][["V1"]]]

*Reproducible data*
table1 <- fread( "individual id | date 1 | 2018-01-02 1 | 2018-01-03 2 | 2018-01-02 2 | 2018-01-03", sep ="|" ) table2 <- fread( "individual id | date2 | alpha 1 | 2018-01-02 | 1 1 | 2018-01-04 | 1.5 1 | 2018-01-05 | 1 2 | 2018-01-01 | 2 2 | 2018-01-02 | 1 2 | 2018-01-05 | 4", sep = "|" )

        
Present in both answers; Present only in the new answer; Present only in the old answer;