다음 데이터 프레임을 만들었습니다.
age <- c(21,35,829,2)
sex <- c("m","f","m","c")
height <- c(181,173,171,166)
weight <- c(69,58,75,60)
dat <- as.data.frame(cbind(age,sex,height,weight), stringsAsFactors = FALSE)
dat$age <- as.numeric(age)
dat
이제 20 세 이상 80 세 미만의 학생들 만 선택하고 싶습니다.
이것이 작동하는 이유 : dat[dat$age<20| dat$age>80,] ; subset(dat, age < 20 | age > 80)
그러나 이것은 그렇지 않습니다. dat[dat$age>20| dat$age<80,] ; subset(dat, age > 20 | age < 80)
80 세 미만이거나 20 세 미만인 행은 하위 집합을 만들 수 있지만 실제로이 간격에있는 행은 제외 할 수 있습니다.
실수는 무엇입니까?
미리 감사드립니다.
당신의 상태는 기본적으로 가능한 모든 연령을 허용하기 때문입니다. 생각해보십시오. 조건은 독립적이므로 ( |
연산자를 사용하고 있기 때문에 ) 조건 중 하나에 맞는 모든 행이 필터에 의해 선택됩니다. 현재 data.frame에 정의 된 모든 연령은 20 세 이상이거나 그렇지 않은 경우 확실히 80 세 미만입니다.
20 세에서 80 세 사이의 모든 행을 선택하려면 논리 연산자를 변경합니다. 이러한 조건을 종속적으로 만들려면 다음과 같이하십시오.
dat[dat$age>20 & dat$age<80,]
subset(dat, age > 20 & age < 80)
결과 :
age sex height weight
1 21 m 181 69
2 35 f 173 58
이제이 간격을 벗어난 모든 행을 선택 !
하려면 주석 섹션에서 @ r2evans가 제안한 것처럼 연산자를 사용 하여이 논리 조건을 무효화 할 수 있습니다. 다음과 같습니다.
dat[!(dat$age > 20 & dat$age < 80),]
subset(dat, !(age > 20 & age < 80))
결과 :
age sex height weight
3 829 m 171 75
4 2 c 166 60
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다