2013-12-13 4 views
1

내에서 문자 벡터의 특정 위치에있는 번호를 추출하는 방법 :나는 csv 파일이처럼 보이는이 데이터 프레임

data[1,]"0;0;0;0";"0;0;0;0";"1395,387994;0;0;0";"1438,433382;0;0;0";"1477,891654;0;0;0";NA;NA;NA;NA 
data[2,]"0;0;0;0";"1129,941435;0;0;0";"1140,702782;0;0;0";"1140,702782;0;0;0";"2415,922401;0;0;0";"2469,729136;0;0;0";"2545,058565;0;0;0";NA;NA 
data[3,]"0;0;0;0";"0;0;0;0";"0;0;0;0";"0;0;0;0";"1506,58858;0;0;0";"1506,58858;0;0;0";"1517,349927;0;0;0";"1528,111274;0;0;0";NA 

기본적으로는 (238)에 의해 581 데이터 프레임을. 내가 원한 것은 NA의 값을 NA로 유지하고 "0; 0; 0; 0"을 NA로 변환하고 첫 번째 숫자가 "1506,58858; 0; 0; 0 "이다.

결과는 다음과 같아야합니다

data[1,] NA NA 1395,387994 1438,433382 1140,702782 Na NA NA NA 
data[2,] NA 1129,941435 1140,702782 1140,702782 2415,922401 2469,729136 2545,058565 NA NA 
data[2,] NA NA NA NA 1506,58858 1506,58858 1517,349927 1528,111274 NA 

나는이처럼 내 데이터를 읽어 : 나는 그것이 매우 쉬운 일이 알고

f0=read.table("D:../f0.per.call.csv",sep=";",na.strings =c("NA","0;0;0;0"),stringsAsFactors = FALSE) 

하지만 난 그것을 알아낼 수 없습니다, 나는에 계속 문자를 숫자 값으로 변환하려고 할 때 오류가 발생합니다. 어떤 도움을 주셔서 감사 드리며, 감사합니다. 나는 파일을 읽은 후

답변

2

나는, 2 단계에서 할 것입니다 :

  • 사용 정규 표현식은 "0을 제거하기 위해 NA에 의해"0; 0; 0 0 ";

    • 교체를 0; 0 ; " 일부 열 여기

  • 의 말에 나는 "0 0 0"으로 대체하는 데 사용되는 코드입니다 :

    dat <- read.table("D:../f0.per.call.csv", 
         sep=";",na.strings =c("NA"),stringsAsFactors = FALSE) 
    dat[dat=="0;0;0;0"] <- NA 
    sapply(dat,function(x)gsub("(.*);0;0;0","\\1",x)) 
    
        V1 V2   V3   V4   V5   V6   V7   V8   V9 
    [1,] NA NA   "1395,387994" "1438,433382" "1477,891654" NA   NA   NA   NA 
    [2,] NA "1129,941435" "1140,702782" "1140,702782" "2415,922401" "2469,729136" "2545,058565" NA   NA 
    [3,] NA NA   NA   NA   "1506,58858" "1506,58858" "1517,349927" "1528,111274" NA 
    
    1

    이 데이터에 읽고 나면, 당신은 strsplit를 사용하고 단지를 추출 할 수 있습니다 첫 번째 항목은 lapply/sapply/vapply입니다. 다음 예는 다음과 같습니다

    f0 <- read.table("D:../f0.per.call.csv", sep=";", 
           na.strings = c("NA","0;0;0;0"), 
           stringsAsFactors = FALSE) 
    f0[] <- lapply(f0, function(y) 
        vapply(strsplit(as.character(y), ";"), 
         function(z) z[[1]], "")) 
    f0 
    #  V1   V2   V3   V4   V5   V6   V7   V8 V9 
    # 1 <NA>  <NA> 1395,387994 1438,433382 1477,891654  <NA>  <NA>  <NA> <NA> 
    # 2 <NA> 1129,941435 1140,702782 1140,702782 2415,922401 2469,729136 2545,058565  <NA> <NA> 
    # 3 <NA>  <NA>  <NA>  <NA> 1506,58858 1506,58858 1517,349927 1528,111274 <NA> 
    

    여기서의 결과는 입력이 data.frame이었다 단지처럼 data.frame입니다.

    관련 문제