R은 대규모 데이터 프레임의 경우 NaN을 NA로 변환할 수 없습니다.

StackOverflow https://stackoverflow.com//questions/9610073

  •  09-12-2019
  •  | 
  •  

문제

실수로 채워진 ~ 60개 열의 적당한 크기 데이터 세트가 있습니다. NaN대신에 NA'에스.열 유형은 문자, 숫자, 요소, 정수가 혼합되어 있습니다.변환해야 해요 NaNNA선형 회귀를 포함한 여러 기능에 대한 작업을 망치고 있기 때문입니다.나는 이 질문에서 개별 열을 변경하는 방법을 알고 있습니다.

R은 NaN을 NA로 변환할 수 없습니다.

하지만 벡터 유형을 잃지 않고 전체 데이터 프레임에 대해 이 작업을 수행할 수 있는 방법이 있는지 궁금합니다.제안 사항이 있습니까? 아니면 수동 작업입니까?

도움이 되었습니까?

해결책

이것이 작동할까요?(숫자, 정수, 문자 및 요인 벡터에 해당해야 합니다.)

as.data.frame( lapply(dat, function(col) {
                 if (is.numeric(col)) { is.na(col) <- is.nan(col); return(col)} else {
                 if (is.character(col) || is.factor(col) )  {
                                              is.na(col) <- col == "NaN"; return(col)} else {
                 return(col)                                                                }
                                                                                     }
                                          }
               )

dat <- 
structure(list(tester1 = structure(c(1L, 1L, 2L, 3L, 1L, 2L, 
4L), .Label = c("2", "3", "4", "NaN"), class = "factor"), tester2 = c(2, 
2, 3, 4, 2, 3, NaN)), .Names = c("tester1", "tester2"), row.names = c(NA, 
-7L), class = "data.frame")

# Produced:

  tester1 tester2
1       2       2
2       2       2
3       3       3
4       4       4
5       2       2
6       3       3
7    <NA>      NA

다른 팁

일 것이다

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)

일하다?

아마도 당신은 다음과 같은 혼합이 필요할 것입니다 apply.제가 구현할 수 있도록 작은 예를 제공해 주시겠습니까?

감사해요.

위의 샘플 데이터 세트를 사용합니다.이 시도:

CMBv = colnames(dat)

dat[CMBv] = lapply(dat[CMBv], function(x){ifelse(is.nan(x), NA,x)} )
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top