반응형
"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
반응형
'programing tip' 카테고리의 다른 글
저장 프로 시저에서 "SET XACT_ABORT ON"을 사용하면 어떤 이점이 있습니까? (0) | 2020.05.30 |
---|---|
.build, .create 및 .create의 차이점! (0) | 2020.05.30 |
Java의 콜백 함수 (0) | 2020.05.30 |
C ++에서 텍스트 파일에 텍스트를 추가하는 방법은 무엇입니까? (0) | 2020.05.30 |
$ .ajax를 사용하여 쿼리 문자열 대신 JSON을 보내는 방법은 무엇입니까? (0) | 2020.05.30 |