문제

NA로 해결되는 논리적 평가가 벡터 비교 기반 하위 집합에서 가짜 행을 생성하는 이유를 누군가 설명할 수 있습니까?예를 들어:

employee <- c("Big Shot CEO", "Programmer","Intern","Guy Who Got Fired Last Week")
salary <-   c(      10000000,        50000,       0,                           NA)
emp_salary <- data.frame(employee,salary)

# how many employees paid over 100K?
nrow(emp_salary[salary>100000,]) # Returns 2 instead of 1 -- why?

emp_salary[salary>100000,]
# returns a bogus row of all NA's (not "Guy Who Got Fired")
#        employee salary
# 1  Big Shot CEO  1e+07
# NA         <NA>   <NA>

salary[salary>100000]
# returns:
# [1] 1e+07    NA

NA > 100000 #returns NA

이러한 예상치 못한 행동을 고려할 때 위 예에서 연봉이 100,000을 넘는 직원 수를 계산하는 데 선호되는 방법은 무엇입니까?

도움이 되었습니까?

해결책

우선, 아마도 당신은 원하지 않을 것입니다 cbind() 첫째, 모든 변수를 문자로 강제 변환합니다.

 emp_salary <- data.frame(employee,salary)

두 가지 가능한 솔루션:

  • subset 기준이 다음과 같은 경우는 자동으로 제외됩니다. NA:

nrow(subset(emp_salary,salary>1e5))
  • 결과를 직접 계산하고 사용 na.rm=TRUE:

sum(salary>1e5,na.rm=TRUE)

가짜 행의 논리는 다음과 같습니다.

  • bigsal <- salary>1e5 다음을 포함하는 논리 벡터입니다. NAs, 그래야만 합니다(왜냐하면 NA 값이 기준을 만족하는지 여부).
  • 다음을 포함하는 논리 벡터를 사용하여 데이터 프레임의 행을 인덱싱할 때 NAs, 이것은 아마도 가장 눈에 띄는 문서일 것입니다. help("[")):

    추출 시 숫자, 논리 또는 문자 'NA' 인덱스는 알 수 없는 요소를 선택하므로 논리, 정수, 숫자, 복소수 또는 문자 결과의 해당 요소에 'NA'를 반환하고 목록의 경우 'NULL'을 반환합니다.

(검색해봤는데 help("[.data.frame") 더 유용한 것을 볼 수 없었습니다.)

기억해야 할 점은 인덱싱이 완료되면 R은 더 이상 논리 벡터가 salary 따라서 다른 열의 값을 유지하는 등 원하는 작업을 수행할 수 있는 방법이 없습니다.여기 NANA에스:R이 행을 완전히 제외하면 이는 다음 기준에 해당합니다. FALSE.이를 유지하는 경우(몇 개의 열만 유지하고 다른 열은 삭제할 수 없다는 점을 기억하세요) 이는 다음 기준에 해당합니다. TRUE.기준이 둘 다 아닌 경우 FALSE ...도 아니다 TRUE, 그러면 다른 행동이 의미가 있는지 확인하기가 어렵습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top