programing tip

"OR"을 사용하여 여러 조건을 결합하여 데이터 프레임의 하위 세트를 만드는 방법은 무엇입니까?

itbloger 2020. 5. 30. 22:16
반응형

"OR"을 사용하여 여러 조건을 결합하여 데이터 프레임의 하위 세트를 만드는 방법은 무엇입니까?


R에 data.frame이 있습니다. 두 개의 다른 열에서 두 가지 다른 조건을 시도하고 싶지만 이러한 조건을 포함시키기를 원합니다. 따라서 조건을 결합하기 위해 "OR"을 사용하고 싶습니다. "AND"조건을 사용하려고 할 때 많은 성공을 거두기 전에 다음 구문을 사용했습니다.

my.data.frame <- data[(data$V1 > 2) & (data$V2 < 4), ]

그러나 위의 'OR'을 사용하는 방법을 모르겠습니다.


my.data.frame <- subset(data , V1 > 2 | V2 < 4)

이 함수의 동작을 모방하고 함수 본문에 포함하기에 더 적합한 대체 솔루션 :

new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]

일부 사람들은 which필요에 따라 사용을 비판 하지만 NA값이 원치 않는 결과를 버리는 것을 막습니다 . V1 또는 V2의 NA에 대해 NA 행을 반환하지 않는)은 위에서 설명한 두 가지 옵션에 해당하지 않습니다 which.

 new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4)  , ]

참고 : 위 코드에서 오류를 수정하려고 시도한 익명의 기고자에게 감사의 말을 전합니다. 수정자는 중재자가 거부했습니다. 실제로 첫 번째 오류를 수정할 때 발견 한 추가 오류가있었습니다. NA 값을 확인하는 조건절은 내가 의도 한대로 처리하려면 먼저해야합니다 ...

> NA & 1
[1] NA
> 0 & NA
[1] FALSE

'& "를 사용할 때 인수 순서가 중요 할 수 있습니다.


"|."을 찾고 있습니다 http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors를 참조 하십시오

my.data.frame <- data[(data$V1 > 2) | (data$V2 < 4), ]

그냥 완전성을 위해, 우리는 연산자를 사용할 수 있습니다 [[[:

set.seed(1)
df <- data.frame(v1 = runif(10), v2 = letters[1:10])

몇 가지 옵션

df[df[1] < 0.5 | df[2] == "g", ] 
df[df[[1]] < 0.5 | df[[2]] == "g", ] 
df[df["v1"] < 0.5 | df["v2"] == "g", ]

DF $ 이름은 동등 DF [ "이름", 일치 = FALSE]

사용 dplyr:

library(dplyr)
filter(df, v1 < 0.5 | v2 == "g")

사용 sqldf:

library(sqldf)
sqldf('SELECT *
      FROM df 
      WHERE v1 < 0.5 OR v2 = "g"')

위 옵션에 대한 출력 :

          v1 v2
1 0.26550866  a
2 0.37212390  b
3 0.20168193  e
4 0.94467527  g
5 0.06178627  j

참고 URL : https://stackoverflow.com/questions/4935479/how-to-combine-multiple-conditions-to-subset-a-data-frame-using-or

반응형