Data.table: [рдмрдЧ] %in% рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╢реНрд░реЗрдгреА рдореЗрдВ рд▓реЛрдЕрд░рдХреЗрд╕ рдФрд░ рдЕрдкрд░рдХреЗрд╕ рджреЛрдиреЛрдВ рдЕрдХреНрд╖рд░ рд╣реИрдВ

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

рд╕рдВрд╕реНрдХрд░рдг 1.11.2 , %in% рдФрд░ & рдХрдердиреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, %in% рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░рдХ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

install.packages('data.table')
packageVersion("data.table")   # тАШ1.11.2тАЩ
data("iris")
library(data.table)
iris <- data.table(iris)
iris$grp <- c('A', 'B')

[рдореБрджреНрджрд╛]
'рд╡рд░реНрдЬрд┐рдирд┐рдХрд╛' рдореЗрдВ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдХреЛ рдХреИрдкрд┐рдЯрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, %in% рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ & рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рджреЛрдиреЛрдВ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ:

iris[, Species1 := factor(Species, levels = c('setosa', 'versicolor', 'virginica'), labels = c('setosa', 'versicolor', 'Virginica'))]

iris[Species1 %in% c('setosa', 'Virginica') & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 0          0         25 

[рдЙрджрд╛рд╣рд░рдг]
рдиреАрдЪреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рд╡реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд░ рдореИрдВ рдХреЗрд╡рд▓ рд▓реЛрдЕрд░рдХреЗрд╕ рд╡рд╛рд▓реЗ рд╕рдореВрд╣реЛрдВ рдкрд░ рд╕рдмрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рджреЛрдиреЛрдВ рд╕рдореВрд╣ рдкрд╛рдП рдЧрдПред

iris[Species1 %in% c('setosa', 'versicolor') & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25         25          0 

рдпрд╛, рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рднреА рдХрдерди рдореЗрдВ рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рджреЛрдиреЛрдВ рд╕рдореВрд╣ рдкрд╛рдП рдЧрдПред

iris[(Species1 %in% c('setosa', 'Virginica')) & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25          0         25 
iris[Species1 %in% c('setosa', 'Virginica') & (grp == 'B'), table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25          0         25 

рдореИрдВрдиреЗ рдЗрд╕ рдХрдерди рдХреЛ subset рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдЬрд╝рдорд╛рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

table(subset(iris, Species1 %in% c('setosa', 'Virginica') & grp == 'B')$Species1)
# setosa versicolor  Virginica 
# 25          0         25 

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг data.table рдкреИрдХреЗрдЬ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 1.10.4-3 рдХрд░реЗрдВ):

devtools::install_version("data.table", version = "1.10.4-3", repos = "http://cran.us.r-project.org")

packageVersion("data.table")   # тАШ1.10.4.3тАЩ
data("iris")
library(data.table)
iris <- data.table(iris)
iris$grp <- c('A', 'B')

iris[, Species1 := factor(Species, levels = c('setosa', 'versicolor', 'virginica'), labels = c('setosa', 'versicolor', 'Virginica'))]

iris[Species1 %in% c('setosa', 'Virginica') & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25          0         25 

[рд╕рддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА]

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.11.2

loaded via a namespace (and not attached):
[1] compiler_3.4.4 tools_3.4.4    yaml_2.1.18   

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

рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ (рдЙрдореНрдореАрдж рд╣реИ) рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИ рдЬрд┐рд╕реЗ рдореЗрд░реЗ рдЕрдкрдиреЗ рдкреАрдЖрд░ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

@MarkusBonsch рдПрдХ рдирдЬрд╝рд░

verbose = TRUE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

Optimized subsetting with index 'grp__Species1'
on= matches existing index, using index
Coercing character column i.'Species1' to factor to match type of x.'Species1'. If possible please change x.'Species1' to character. Character columns are now preferred in joins.

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рдВрджреЗрд╢ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрднрд╡рддрдГ рдПрдХ рдЪреЗрддрд╛рд╡рдиреАред

@ ddong63 рдорд┐рд╢реНрд░рд┐рдд рдЪрд░рд┐рддреНрд░ рдФрд░ рдХрд╛рд░рдХ рдХреЗ рд▓рд┐рдП %in% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ, match рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдЪрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ред

@HughParsonage рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЙрдореНрдореАрдж рдХреЗ https://github.com/Rdatatable/data.table/pull/2734 рд▓рдВрдмрд┐рдд рд╣реИред

рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдмред рдореИрдВ ASAP рдХреА рдЬрд╛рдВрдЪ рдФрд░ рд╕реБрдзрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@jangorecki рд╕рд╣реА рдерд╛ред рдЬрдм рджреЛрдиреЛрдВ рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рд╡рд░реНрдг рдпрд╛ рдХрд╛рд░рдХ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ @MarkusBonsch

рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ (рдЙрдореНрдореАрдж рд╣реИ) рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИ рдЬрд┐рд╕реЗ рдореЗрд░реЗ рдЕрдкрдиреЗ рдкреАрдЖрд░ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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