2013-10-18 6 views
1

이상한 형식의 숫자 데이터가 포함 된 CSV 파일에서 큰 데이터 프레임을 가져 왔습니다. 다음은 작업중인 데이터 프레임의 재현 가능한 예입니다.지저분한 데이터 프레임 열 서식 변경 R

df <- data.frame("r1" = c(1,2,3,4,5), "r2" = c(1,2.01,-3,"-","2,000")) 

'r2'에는 음수 기호가있는 값이 들어 있습니다. "-", 0이있는 값은 대시로 표시됩니다 -. 이 지저분한 R2 칼럼에 대한 몇 가지 수치 해석을 실행하려면, 내가 수행해야합니다

  1. 가 교체 "-"제로가 "0"음의 값 앞에 음의 부호를 제거하기 위해 피하면서와.
  2. NA에 "2,000"과 같은 합법적 인 값을 강요하지 마십시오. 웬일인지, 다음 명령을 실행할 때 : foo$row2<- as.numeric(sub("-",0,foo$row2)) R은 쉼표로 NAs 값을 강제 변환하므로 열의 데이터가 손상됩니다.

여기 foo$row2<- as.numeric(sub("-",0,foo$row2))를 실행 한 후 출력의 예를 : 당신이 볼 수 있듯이

Warning message: 
NAs introduced by coercion 
    r1 r2 
1 1 1.00 
2 2 2.01 
3 3 3.00 
4 4 0.00 
5 5 NA 

은 "2,000"NA에 강요했다. -3이 실수로 3 (대시가 제거됨)으로 변환되었습니다. 그러나 헤이, 최소한 우리는 3 열째의 "-"를 없애 버렸다! 행 5에서 쉼표가 제거되었는지

r1 r2 
1 1 1.00 
2 2 2.01 
3 3 -3.00 
4 4 0.00 
5 5 2000 

참고 :

는 여기에 생산 싶은 것이 궁극적으로합니다. r2 열은 sum(df$r2)과 같은 명령을 실행할 수 있도록 포맷해야합니다.

답변

5

당신의 접근 방식은 좋았습니다. 대체를 두 번 실행하십시오. 한 번만 대시 인 항목을 제거하고 한 번 더 쉼표를 제거하십시오. 내가 시작 문자열 만 (^)를 제거 의미 ^-$에 의해

df$r2<-as.numeric(gsub('^-$','0',gsub(',','',df$r2))) 

, 당신은 정규 표현식에 익숙하지 않은 경우는 대시를 한 다음 ($)를 종료합니다.

1

nograpes '솔루션은 방법 쿨러입니다 :

## df <- data.frame("r1" = c(1,2,3,4,5), "r2" = c(1,2.01,-3,"-","2,000")) 

df$r2 <- as.numeric(gsub(",", "", df$r2)) 
df$r2[is.na(df$r2)] <- 0 

## r1  r2 
## 1 1 1.00 
## 2 2 2.01 
## 3 3 -3.00 
## 4 4 0.00 
## 5 5 2000.00 
+0

그들은 거의 동등한 나에게 보인다. –