Gần đây, tôi đã phải đối mặt với một hành vi trong table
chức năng đó không phải là những gì tôi đã mong đợi:Bất ngờ hành vi của bảng chức năng với "NaN" giá trị
Ví dụ, chúng ta hãy lấy vectơ sau:
ex_vec <- c("Non", "Non", "Nan", "Oui", "NaN", NA)
Nếu tôi kiểm tra NA
giá trị trong vector của tôi, "NaN"
không được xem là một (như dự kiến):
is.na(ex_vec)
# [1] FALSE FALSE FALSE FALSE FALSE TRUE
Nhưng nếu tôi cố gắng để nhận các giá trị tần số khác nhau:
table(ex_vec)
#ex_vec
#Nan Non Oui
# 1 2 1
"NaN"
không xuất hiện trong bảng.
Tuy nhiên, nếu tôi "yêu cầu" table
để hiển thị các NA
giá trị, tôi có được điều này:
table(ex_vec, useNA="ifany")
#ex_vec
# Nan NaN Non Oui <NA>
# 1 1 2 1 1
Vì vậy, chuỗi kí tự "NaN"
được coi là một NA
giá trị bên trong table
cuộc gọi, trong khi được điều trị tại các ouput dưới dạng giá trị không phải là NA
.
Tôi biết (sẽ tốt hơn và) tôi có thể giải quyết vấn đề của mình bằng cách chuyển đổi véc tơ của tôi thành factor
nhưng dù sao, tôi thực sự muốn biết điều gì đang xảy ra ở đây. Có ai có ý tưởng gì không?
điều này chỉ là sử dụng cơ bản .. như "tại sao 'sum (c (1, NA)) 'return NA?" 'table (..., exclude = if (useNA ==" no ") c (NA, NaN), useNA = c (" không "," ifany "," luôn luôn ")' Tôi không hiểu mục đích của những câu trả lời này – rawr
@rawr để giải thích lý do tại sao a * string * được coi là giá trị 'NaN'? Đây không phải là cách sử dụng được hỏi, nhưng tại sao nó lại ít rõ ràng hơn so với ví dụ tổng của bạn. Ý tôi là: 'NaN! =" NaN "' vậy tại sao 'NaN '' bị loại trừ vì nó không phải là một phần của vector loại trừ) – Tensibai
@Tensibai một lần nữa, các tài liệu nói 'loại trừ: các mức để loại bỏ cho tất cả các yếu tố' _levels_ không 'NA' cũng không phải là' NaN', chúng là _strings_ .. aways _strings_ try 'table (1, exclude = 1)' – rawr