2011-06-13 6 views
17

위의 형식을 가진 데이터 파일이 있습니다.
R에로드하고 dist 열의 값으로 막대 그래프를 플롯하려했는데 "x는 숫자 여야합니다."라는 오류가 있습니다. 따라서 형식을 변경하려고했습니다. 열 유형을 숫자로 변환 할 때 값 변경

> head(data) 

    V1  V2 
1 type gene_dist 
2 A  64667 
3 A  76486 
4 A  97416 
5 A  30876 
6 A  88018 

> summary(data) 
    V1   V2  
A : 67 100 : 1 
B :122 100906 : 1 
type: 1 102349 : 1 
      1033 : 1 
      10544 : 1 
      10745 : 1 
      (Other):184 

나는 값이 변경되지만 sapply를 사용하여 열 형식을 설정하려고 :

> data[,2]<-sapply(data[,2],as.numeric) 

> head(data) 
    V1 V2 
1 type 190 
2 A 146 
3 A 166 
4 A 189 

summary(data) 
    V1   V2   
A : 67 Min. : 1.00 
B :122 1st Qu.: 48.25 
type: 1 Median : 95.50 
      Mean : 95.50 
      3rd Qu.:142.75 
      Max. :190.00 

이 사람이 왜 이런 일이 일어나고 알고 있나요?

+0

결과를 재현 할 수 있도록'dput (data)'의 출력을 붙여 넣을 수 있습니까? 제 생각에는 여러분이'factor '를'numeric'으로 직접 변환하고 있다는 것이 문제의 원인입니다. 'function (x) as.character (as.숫자가 (x))'작동하는지 확인하십시오. – Ramnath

+0

@ Ramnath - as.numeric (as.character (x))으로 해결되는 문제 – agatha

+0

헤더를 행으로 읽으므로 R이 열로 요소를 분류하는 것처럼 보입니다. 기입. ''read.table()'호출에서'header = T'를 설정하면이를 수정해야합니다. –

답변

32

두 번째 열이 요인 인 것처럼 보입니다. as.numeric 전에 as.character을 사용해야합니다. 이것은 요인들이 내부적으로 정수로 표에 저장되어 요인 수준 레이블을 제공하기 때문입니다. as.numeric을 사용하면 내부 정수 코드 만 제공됩니다. 이 기능들은 벡터화되어 있으므로 sapply을 사용할 필요가 없습니다.

data[,2] <- as.numeric(as.character(data[,2])) 

일부 항목에 숫자가 아닌 문자가 있기 때문에 열이 원인 일 수 있습니다. 이러한 항목은 적절한 경고와 함께 NA으로 변환되지만 원시 데이터에서 조사해야 할 수 있습니다.

보조 노트로 data은 동일한 이름의 기본 함수가 있기 때문에 변수 이름에 좋지는 않지만 유효하지 않습니다.

+0

@ James : 그것은 효과가있었습니다. 감사합니다. 나는 당신의 관찰을 고려할 것입니다. – agatha

+0

@Andra 여러분의 질문이 좀 더 형식화되었다는 것을 알았습니다. 그 이유 중 하나는 열 이름이 데이터에 포함된다는 것입니다. 데이터를 읽는 명령에'header = TRUE' 인수를 추가 할 수 있습니다. – James

+0

@ James- 나는 그것을 기억할 것이다. - 텍스트 파일에서 열을 제거하고 수동으로 추가했습니다. 아마도 가장 우아한 방법은 아니지만 ... 작동합니다. (as_numeric (levels (f)) [f]'는 대체 코드입니다.) asymnames (chip_data) <- c ("type", "gene_dist") – agatha

0

data 개체가 read.csv에서 읽혀질 때 '목록'값이 포함 된 행렬에 대해 동일한 문제가 발생했습니다. as.character()이 여기에서 작동하지 않으며 as.numeric()data.matrix()이 매트릭스의 값을 변경했습니다. 대신 다음 사용해야합니다 : 먼저 이중에 다음 문자로 변환

matrix_numeric[1:m,1:n] <- as.numeric(as.matrix(data[1:m,1:n]))

. 행렬 차원 데이터 [m, n]의 경우.

out1 <- as.numeric(unlist(vec1));

0

그것은 아마 훨씬 더를 해결하기 위해입니다 : 목록 형식으로 벡터 vec1를 들어

(당신이 ... 값을 할당하기 전에 먼저 객체 matrix_numeric를 만들 matrix_numeric <- matrix(0,m,n) 필요), 나는 다음과 같은 사용 as.numeric() 또는 as.character()를 사용하는 것보다 파일을 읽을 때. 파일을 읽을 때 첫 번째 행 헤더는

  • NA하지 Na 또는 NaN 경우

    • header=TRUE을 가지고 있는지 확인하십시오 (CTRL + H와 데이터 파일에 NA에 의해 교체하지)에
    • 다른 문자열을 숫자 열

    그러면 R은 자동으로 숫자로 간주합니다.

  • 관련 문제