2014-10-17 2 views
1

원래 Excel에서 포맷 된 CSV 파일로 작업하고 있습니다. 비율 열을 숫자로 변환하고 "$"기호를 제거하고 싶습니다. 나는 변환을 수행 할 때r 데이터 프레임에서 열 클래스를 설정하는 동안 ####에서 NA로 오류 제거하기

HH.IMP..000.  ISCI           Creative   Program Rate 
1   NA  IT3896 Rising Costs30 (Opportunity Scholar - No Nursing)  NUVO CINEMA $0.00 
2   NA  IT3896 Rising Costs30 (Opportunity Scholar - No Nursing)  NUVO CINEMA $0.00 
3   141 IT14429 Rising Costs30 (Opportunity Scholar - No Nursing)   BONUS $0.00 
4   476 ITES15443H  Matthew Traina (B. EECT/A. CEET) :60 (no loc) Law & Order: SVU $0.00 
5   NA  IT3896 Rising Costs30 (Opportunity Scholar - No Nursing)  NUVO CINEMA $0.00 

, 나는 오류 메시지가 : 데이터 프레임은 다음과 같습니다 > NImp <- read.csv("National_TV_Spots 6_30_14 to 8_31_14.csv", sep=",", header=TRUE, stringsAsFactors=FALSE, strip.white=TRUE, na.strings=c("Not Monitored"))

:

내가 가진 파일을 읽어 > NImp$Rate <- as.numeric(gsub("$","", NImp$Rate)) Warning message: NAs introduced by coercion 모든 값을 강요받을 NAs.

나는 또한 시도했다, NImp$Rate <- as.numeric(sub("\\$","", NImp$Rate)) 그러나 다시 동일한 경고 메시지를 얻었다. 그러나 모든 가치가 NA가되는 것은 아닙니다. 나는 csv를 엑셀로 열었고, csv 열 너비를 너무 좁혀서 "####"셀을 생성한다는 것을 깨달았습니다. 이 셀은 r에 의해 "NA"로 강제 변환됩니다.

메모장에서 파일을 열고 메모장 파일을 r으로 읽는 옵션을 시도했습니다. 그러나 나는 같은 결과를 얻는다. 값은 메모장과 파일을 r으로 읽을 때 올바르게 표시됩니다. 그러나 숫자로 변경하면 Excel에서 "####"로 표시되는 모든 내용이 NA이됩니다.

어떻게해야합니까? 열이 Excel에서 "환율"로 설정 str(NImp)

'data.frame': 9859 obs. of 19 variables: 
$ Spot.ID   : int 13072903 13072904 13072898 13072793 13072905 13072899 13072397 13072476 13072398 13072681 ... 
$ Date   : chr "6/30/2014" "6/30/2014" "6/30/2014" "6/30/2014" ... 
$ Hour   : int 0 0 0 0 0 0 1 1 1 2 ... 
$ Time   : chr "12:08 AM" "12:20 AM" "12:29 AM" "12:30 AM" ... 
$ Local.Date  : chr "6/30/2014" "6/30/2014" "6/30/2014" "6/30/2014" ... 
$ Broadcast.Week : int 1 1 1 1 1 1 1 1 1 1 ... 
$ Local.Hour  : int 0 0 0 0 0 0 1 1 1 2 ... 
$ Local.Time  : chr "12:08 AM" "12:20 AM" "12:29 AM" "12:30 AM" ... 
$ Market   : chr "NATIONAL CABLE" "NATIONAL CABLE" "NATIONAL CABLE" "NATIONAL CABLE" ... 
$ Vendor   : chr "NUVO" "NUVO" "AFAM" "USA" ... 
$ Station   : chr "NUVO" "NUVO" "AFAM" "USA" ... 
$ M18.34.IMP..000.: int NA NA 3 88 NA 3 NA 53 NA 37 ... 
$ W18.34.IMP..000.: int NA NA 86 66 NA 86 NA 70 NA 60 ... 
$ A18.34.IMP..000.: int NA NA 89 154 NA 89 NA 123 NA 97 ... 
$ HH.IMP..000. : int NA NA 141 476 NA 141 NA 461 NA 434 ... 
$ ISCI   : chr "IT3896" "IT3896" "IT14429" "ITES15443H" ... 
$ Creative  : chr "Rising Costs30 (Opportunity Scholar - No Nursing)" "Rising Costs30 (Opportunity Scholar - No Nursing)" "Rising Costs30 (Opportunity Scholar - No Nursing)" "Matthew Traina (B. EECT/A. CEET) :60 (no loc)" ... 
$ Program   : chr "NUVO CINEMA" "NUVO CINEMA" "BONUS" "Law & Order: SVU" ... 
$ Rate   : chr "$0.00" "$0.00" "$0.00" "$0.00" ... 
+1

입니다. 'as.numeric (sub ("\\ $", "", df $ Rate))'나를 위해 작동 –

+1

무엇이 문제의 원인인지는 모르지만, 1) "\\ $"는 ($는 문자열의 끝과 일치합니다.) 2) csv 파일을 표시하는 방법이 중요하지 않으므로 #### – konvas

+0

에 대해 걱정하지 마십시오. "####"셀은 실제로 "$ 1200.00"입니다. csv 파일은 Excel 형식으로되어 있습니다. 메모장으로 저장하면 행과 열이 토스 (toss)로 바뀝니다. 내가 추측하는 쉼표 값과 관련이 있습니다. Excel은 "$ 1200.00"의 열 너비를 줄이며 "r"이 "na"로 읽는 "####"이됩니다. 그 혼란. – vagabond

답변

1

추가

, 수천 이상의 값들을 쉼표뿐만 아니라 달러 기호 접두사가. 예를 들어 값은 $1,200.00입니다. 문제는 달러 기호를 제거했지만 쉼표가 아니기 때문에 발생했습니다. 따라서 numeric으로 변환하려고 시도하면 NA이됩니다.

as.numeric(c("0", "0", "1,200")) 
[1] 0 0 NA 
Warning message: 
NAs introduced by coercion 

당신은 gsub를 사용하여 한 단계에서 달러 기호 및 쉼표를 제거 할 수 있습니다. 나는 이것을 this answer에 대한 코멘트에서 어떻게하는지 보여주는 예를 발견했다.

as.numeric(gsub("[$,]", "", c("$0", "$0", "$1,200"))) 
[1] 0 0 1200 

그래서 데이터 집합에 대한 작동합니다 코드는 내가 문제를 재현 할 수 없습니다

as.numeric(gsub("[$,]", "", NImp$Rate)) 
+0

그게 정확히 무슨 일이야. 쉼표로 된 모든 숫자에는 그 문제가있었습니다. – vagabond

+0

관련 : NImp $ Rate 열에 "4167"과 같이 이미 숫자가있는 특정 값이 있습니다. 위의 기능을 적용하면 NAs로 바뀝니다. 선택적으로 적용 할 수있는 솔루션은 무엇입니까? – vagabond

+0

@vagabond 'as.numeric (gsub ("$, $", "$ 0", "$ 1,200", "4167")))은 나를 위해 작동합니다. . 어쩌면 새로운 질문을할까요? – aosmith

관련 문제