Игорь Черниенко писал(а):gamm, а почему результат вот этого выражения
data.frame_2 <- data.frame_1[-(data.frame_1[, 3] > 20.5)&(data.frame_1[, 4]=="Г" ),]
аналогичен этому?
data.frame_2 <- data.frame_1[(data.frame_1[, 3] > 20.5)&(data.frame_1[, 4]=="Г" ),]
Я не силен в буллевой алгебре, но когда в R перед условием ставят минус, соответствующие строки, вроде, должны исключаться.
"Смешались в кучу кони , люди ..."
> foo<-c(TRUE,FALSE,TRUE)
> -foo
[1] -1 0 -1
> (-foo)&TRUE
[1] TRUE FALSE TRUE
> (-foo)|FALSE
[1] TRUE FALSE TRUE
исключаться строки будут, если в индексе используются
номера строк. Если минус стоит перед
логическим индексом (который TRUE/FALSE), то, в соотвествии с Традицией (С-шной), TRUE превращается в -1, а FALSE в 0. Ежели теперь этот вектор использовать в
логическом выраженеии, то (в соответствии с С-шной традицией) нули превращаются в FALSE, все остальное в TRUE, т.е. минус какбэ не действует на логические индексы.
Так что ваш совет работать не будет, для исключения нужно использовать логическое НЕ (а не минус), логическое НЕ в R - восклицательный знак ("!"). Т.е. будет так:
ind<-(data.frame_1[, 3] > 20.5)&(data.frame_1[, 4]!="Г" ) # найти, чего не нужно, и положить в ind
data.frame_2 <- data.frame_1[!ind,] # копировать все, кроме ind
P.S. R, конечно, далеко до PL/1, но здесь тоже почти все почти во все преобразуется, иногда с весьма неожиданными результатами
