R은 대규모 데이터 프레임의 경우 NaN을 NA로 변환할 수 없습니다.
문제
실수로 채워진 ~ 60개 열의 적당한 크기 데이터 세트가 있습니다. NaN
대신에 NA
'에스.열 유형은 문자, 숫자, 요소, 정수가 혼합되어 있습니다.변환해야 해요 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)} )
제휴하지 않습니다 StackOverflow