Data.table: рдпрджрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдд рд╕реНрддрдВрдн рдирд╛рдо рд╕рдореНрдорд┐рд▓рд┐рдд рд╕реНрддрдВрдн рдирд╛рдо рдХрд╛ рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рддреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕реЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдЬреБрдбрд╝рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдирд╡ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Rdatatable/data.table

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рджреЛ data.tables рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ-рдЕрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдгрд╛рдо рдЙрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

library(data.table)

# In the code below the join does not deliver the result I would expect
DT1 <- data.table(colname=c("test1","test2","test2","test3"), colname_with_suffix=c("other","test","includes test within","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[colname_with_suffix == "not found", ]  # automatically creates index on colname_with_suffix
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]
# PLEASE NOTE: same result with slightly different syntax: DT1[DT2, lookup_result := i.lookup_result, on=c(colname="lookup")][]
# colname  colname_with_suffix lookup_result
# 1:   test1                other         NA
# 2:   test2                 test         NA
# 3:   test2 includes test within         NA
# 4:   test3                other          3


# Expected result:
 # colname  colname_with_suffix lookup_result
# 1:   test1                other          1
# 2:   test2                 test          2
# 3:   test2 includes test within          2
# 4:   test3                other          3

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдХреЛрдИ рд╕реНрддрдВрдн рд╕реНрддрдВрдн рдкрд░ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрддрдВрдн рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрддрдВрдн рдирд╛рдо рдХрд╛ рдЙрдкрд╕рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдкрд╛рда рд╕рд╛рдордЧреНрд░реА рд╣реЛрддреА рд╣реИред

# For all following alternatives the join delivers the correct result

# (a) Same data tables as above, but no index
DT1 <- data.table(colname=c("test1","test2","test2","test3"), colname_with_suffix=c("other","test","includes test within","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]

# (b) Index on DT2, but completely different values in indexed column than in join column
DT1 <- data.table(colname=c("test1","test2","test2","test3"), colname_with_suffix=c("other","other","other","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[colname_with_suffix == "not found", ]  # automatically creates index on colname_with_suffix
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]

# (c) Index on DT2, similar values in indexed column, but indexed column name is not a prefix of join column name
DT1 <- data.table(colname=c("test1","test2","test2","test3"), x.colname_with_suffix=c("other","test","includes test within","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[x.colname_with_suffix == "not found", ]  # automatically creates index on x.colname_with_suffix
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]

рд╕рддреНрд░рдЗрдиреНрдлреЛ:

# R version 3.3.2 (2016-10-31)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 7 x64 (build 7601) Service Pack 1
# 
# locale:
#     [1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252    LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                    LC_TIME=German_Germany.1252    
# 
# attached base packages:
#     [1] stats     graphics  grDevices utils     datasets  methods   base     
# 
# other attached packages:
#     [1] data.table_1.10.0
# 
# loaded via a namespace (and not attached):
#     [1] tools_3.3.2

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдбреЗрдЯрд╛ 1.able 1.10.4 рдФрд░ R.Version 3.4.2 рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ Ubuntu Linux 14.04 рднреА рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдерд╛ (рдкреБрд▓ рдЕрдиреБрд░реЛрдз рджреЗрдЦреЗрдВ)ред рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрдм рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдПрдХ рдмрдЧ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХрд╛ рд╣рдХрджрд╛рд░ рд╣реИред рдореИрдВ рдЗрд╕рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ рд╕рдордп рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдерд╛ (рдкреБрд▓ рдЕрдиреБрд░реЛрдз рджреЗрдЦреЗрдВ)ред рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрдм рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред

@MarkusBonsch рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА data.table рдХреЗ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ рджреЗрд╡ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд▓рд╛рдЧреВ рдХреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬреБрдбрд╝реЗ SO рдкреНрд░рд╢реНрди рд╕реЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред

рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рдЕрдм рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ!

рдЬрд▓реНрджреА рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ THXред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jimhester picture jimhester  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jangorecki picture jangorecki  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rafapereirabr picture rafapereirabr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

symbalex picture symbalex  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

st-pasha picture st-pasha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ