Data.table: [ошибка]% Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅% Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой, Ссли катСгория содСрТит ΠΊΠ°ΠΊ строчныС, Ρ‚Π°ΠΊ ΠΈ прописныС Π±ΡƒΠΊΠ²Ρ‹

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 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')

[ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°]
ПослС использования ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ Π² 'virginica' ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ %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   

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― создал PR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ (надСюсь) Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π­Ρ‚ΠΎ рСгрСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠΎΠΈΡ… собствСнных ΠΏΠΈΠ°Ρ€Ρ‰ΠΈΠΊΠΎΠ².

ВсС 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 ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ рассмотрСния.

ΠžΡ‡Π΅Π½ΡŒ-ΠΎΡ‡Π΅Π½ΡŒ странно. Π― ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡŽ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС. Бпасибо Π·Π° ΠΎΡ‚Ρ‡Π΅Ρ‚.

@jangorecki Π±Ρ‹Π» ΠΏΡ€Π°Π². Когда ΠΎΠ±Π° столбца ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.
ΠžΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚Π΅Π»Π΅Π½ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ @MarkusBonsch

Π― создал PR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ (надСюсь) Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π­Ρ‚ΠΎ рСгрСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠΎΠΈΡ… собствСнных ΠΏΠΈΠ°Ρ€Ρ‰ΠΈΠΊΠΎΠ².

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

rafapereirabr picture rafapereirabr  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

st-pasha picture st-pasha  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

alex46015 picture alex46015  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

pannnda picture pannnda  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

st-pasha picture st-pasha  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ