저는 R에서 일하고 있으며 숫자 벡터가있는 데이터 프레임 dd_2006이 있습니다. 처음 데이터를 가져 왔을 때 Sum, SumOfCases 및 SumOfUnits 변수 중 3 개에서 $, 소수점 및 일부 공백을 제거해야했습니다. 이를 위해 str_replace_all
을 사용했습니다. 그러나 일단 str_replace_all
을 사용하면 벡터가 문자로 변환됩니다. 그래서 as.numeric (var)을 사용하여 벡터를 숫자로 변환했지만 NAs가 도입되었습니다 .number 코드를 실행하기 전에 아래 코드를 실행했지만 벡터에 NA가 없었습니다.NA 강제 변환없이 문자를 숫자로 변환
sum(is.na(dd_2006$SumOfCost))
[1] 0
sum(is.na(dd_2006$SumOfCases))
[1] 0
sum(is.na(dd_2006$SumOfUnits))
[1] 0
다음은 벡터에서 $를 제거부터 시작하여 가져 오기 후에서 내 코드입니다. str(dd_2006)
출력에서 공간을 위해 일부 변수가 삭제되었으므로 아래의 코드 str_replace_all
의 열 #은 내가 게시 한 출력과 일치하지 않습니다 (원래 코드는 같습니다) :
library("stringr")
dd_2006$SumOfCost <- str_sub(dd_2006$SumOfCost, 2,) #2=the first # after the $
#Removes decimal pt, zero's after, and commas
dd_2006[ ,9] <- str_replace_all(dd_2006[ ,9], ".00", "")
dd_2006[,9] <- str_replace_all(dd_2006[,9], ",", "")
dd_2006[ ,10] <- str_replace_all(dd_2006[ ,10], ".00", "")
dd_2006[ ,10] <- str_replace_all(dd_2006[,10], ",", "")
dd_2006[ ,11] <- str_replace_all(dd_2006[ ,11], ".00", "")
dd_2006[,11] <- str_replace_all(dd_2006[,11], ",", "")
str(dd_2006)
'data.frame': 12604 obs. of 14 variables:
$ CMHSP : Factor w/ 46 levels "Allegan","AuSable Valley",..: 1 1 1
$ FY : Factor w/ 1 level "2006": 1 1 1 1 1 1 1 1 1 1 ...
$ Population : Factor w/ 1 level "DD": 1 1 1 1 1 1 1 1 1 1 ...
$ SumOfCases : chr "0" "1" "0" "0" ...
$ SumOfUnits : chr "0" "365" "0" "0" ...
$ SumOfCost : chr "0" "96416" "0" "0" ...
나는 다음과 같은 코드를 사용하여, here 광산에 비슷한 질문에 대한 응답을 발견
# create dummy data.frame
d <- data.frame(char = letters[1:5],
fake_char = as.character(1:5),
fac = factor(1:5),
char_fac = factor(letters[1:5]),
num = 1:5, stringsAsFactors = FALSE)
것은 우리가 data.frame 한 눈에 보자를
> d
char fake_char fac char_fac num
1 a 1 1 a 1
2 b 2 2 b 2
3 c 3 3 c 3
4 d 4 4 d 4
5 e 5 5 e 5
우리가 실행하자 :
> sapply(d, mode)
char fake_char fac char_fac num
"character" "character" "numeric" "numeric" "numeric"
> sapply(d, class)
char fake_char fac char_fac num
"character" "character" "factor" "factor" "integer"
지금 당신은 아마 자신에게 물어 "어디 변칙입니까?" 글쎄, 나는 R에서 아주 특이한 것들에 부딪 쳤고, 이것은 가장 혼란스러운 것이 아니지만, 혼란 스러울 수 있습니다.
다음과 같습니다. 처음 두 열은 문자입니다. 나는 의도적으로 두 번째 fake_char를 호출했습니다. 이 문자 변수의 유사점을 Dirk이 자신의 답장에서 만든 유사점으로 지정하십시오. 실제로 문자로 변환 된 숫자 벡터입니다. 세 번째와 네 번째 열은 factor이며, 마지막 열은 "순전히"숫자입니다.
변환 함수를 사용하는 경우 fake_char을 숫자 변수로 변환 할 수 있지만 char 변수 자체는 변환 할 수 없습니다.
> transform(d, char = as.numeric(char))
char fake_char fac char_fac num
1 NA 1 1 a 1
2 NA 2 2 b 2
3 NA 3 3 c 3
4 NA 4 4 d 4
5 NA 5 5 e 5
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion
but if you do same thing on fake_char and char_fac, you'll be lucky, and get away with no NA's:
은 ( char_fac = as.numeric (char_fac)는 D, fake_char = as.numeric (fake_char))
char fake_char fac char_fac num
1 a 1 1 1 1
2 b 2 2 2 2
3 c 3 3 3 3
4 d 4 4 4 4
5 e 5 5 5 5
그래서 난 내 스크립트에 위의 코드를 시도 변환 , 여전히 NAs (강요에 대한 경고 메시지없이)가 등장했습니다.
#changing sumofcases, cost, and units to numeric
dd_2006_1 <- transform(dd_2006, SumOfCases = as.numeric(SumOfCases), SumOfUnits = as.numeric(SumOfUnits), SumOfCost = as.numeric(SumOfCost))
> sum(is.na(dd_2006_1$SumOfCost))
[1] 12
> sum(is.na(dd_2006_1$SumOfCases))
[1] 7
> sum(is.na(dd_2006_1$SumOfUnits))
[1] 11
나는 또한 등 table(dd_2006$SumOfCases)
내가 관찰에 놓친 모든 문자가 있는지 관찰보고 사용하지만, 어떤이 아니었다했습니다. NAs가 왜 등장하는지, 어떻게 없애겠습니까?
죄송합니다. 무엇이 문제입니까? 링크 된 대답은 모든 것을 아주 잘 요약 한 것으로 보이며 문제의 재현 가능한 예제가 없으면 다른 사람들이 어떻게 도움을 줄지 확신하지 못합니다. – A5C1D2H2I1M1N2O1R2T1
이 데이터가 Excel 또는 다른 스프레드 시트. 다음 번에 내보내기 전에 모든 서식을 지 웁니다. –