R에서 잘못된 하위 집합을 일으키는 NA 값과의 수치 비교
-
21-12-2019 - |
문제
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
다음을 포함하는 논리 벡터입니다.NA
s, 그래야만 합니다(왜냐하면NA
값이 기준을 만족하는지 여부).- 다음을 포함하는 논리 벡터를 사용하여 데이터 프레임의 행을 인덱싱할 때
NA
s, 이것은 아마도 가장 눈에 띄는 문서일 것입니다.help("[")
):추출 시 숫자, 논리 또는 문자 'NA' 인덱스는 알 수 없는 요소를 선택하므로 논리, 정수, 숫자, 복소수 또는 문자 결과의 해당 요소에 'NA'를 반환하고 목록의 경우 'NULL'을 반환합니다.
help("[.data.frame")
더 유용한 것을 볼 수 없었습니다.)
기억해야 할 점은 인덱싱이 완료되면 R은 더 이상 논리 벡터가 salary
따라서 다른 열의 값을 유지하는 등 원하는 작업을 수행할 수 있는 방법이 없습니다.여기 NA
행 NA
에스:R이 행을 완전히 제외하면 이는 다음 기준에 해당합니다. FALSE
.이를 유지하는 경우(몇 개의 열만 유지하고 다른 열은 삭제할 수 없다는 점을 기억하세요) 이는 다음 기준에 해당합니다. TRUE
.기준이 둘 다 아닌 경우 FALSE
...도 아니다 TRUE
, 그러면 다른 행동이 의미가 있는지 확인하기가 어렵습니다 ...
제휴하지 않습니다 StackOverflow