답변:
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
'& "를 사용할 때 인수 순서가 중요 할 수 있습니다.
[
하나 개의 필요에 포장하는 which
또는 추가 사용 !is.na
제약을.
which
. V1과 V2가 모두 NA 인 경우를 제외하면 해당 위치에 NA 행이 표시 which
됩니다. 나는 큰 데이터 세트로 작업하고 상대적으로 적은 비율의 NA조차도 실제로 화면을 정크 출력으로 채 웁니다. 어떤 사람들은 이것이 기능이라고 생각합니다. 난 아니야
grepl
또는에 대한 호출을 어떻게 포함 grep
합니까?
"|."을 찾고 있습니다 http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors를 참조 하십시오
my.data.frame <- data[(data$V1 > 2) | (data$V2 < 4), ]
NA
데이터 프레임에서 s 의 존재에 강력하지 않습니다 :vc <- data.frame(duzey=factor(c("Y","O","Y","D","Y","Y","O"), levels=c("D","O","Y"), ordered=TRUE), cinsiyet=c("E","E","K",NA,"K","E","K"), yas=c(8,3,9,NA,7,NA,6), Not=c(NA,1,1,NA,NA,2,1)); vc; vc[vc$cinsiyet == "E" | vc$Not < 4,]; vc[vc$cinsiyet == "E" & vc$Not < 2,]
그냥 완전성을 위해, 우리는 연산자를 사용할 수 있습니다 [
및 [[
:
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
sqldf
패키지가 너무 좋다. 특히 subset()
조금 아플 때 매우 편리합니다 :)