2014-10-07 8 views
0

전에 R의 상관 알고리즘을 다뤘지만 현재 코드에서 어떤 일이 일어나는지 확신 할 수 없습니다.R의 상관 관계; 숫자

제 입력 데이터는 두 개의 .csv 파일입니다. 첫 번째 열은 하나의 열만 있고 data.frame으로 강요했습니다. 그것은 (내 데이터는 매우 오랜 시간이 시리즈, 그래서 나는 첫 번째 10 개의 데이터 포인트를 보여주는거야)) 다음과 같습니다

    trends 
     V1 0.2701541 
     V2  2.00532 
     V3  1.79548 
     V4 0.2549123 
     V5 0.2124736 
     V6 -1.132594 
     V7 -0.711875 
     V8 -1.577067 
     V9 -0.5320426 
     V10 1.325005 

내 다른 파일에 여러 열이를 다음과 같이 보입니다 :

 X13_EVI  X14_EVI  X15_EVI  X18_EVI 
1 1.0492437 0.54155557 -0.58480284 -3.47111922 
2 1.7274555 1.46141010 0.79416226 1.04050086 
3 1.7274555 1.46141010 0.48772557 1.17721662 
4 -0.1941446 -0.14833532 -0.12514781 0.22020630 
5 -0.1941446 -0.14833532 -0.12514781 0.22020630 
6 -0.5332505 -0.60826258 -0.73802119 -0.73680402 
7 -0.4202152 -0.49328077 -0.12514781 -0.32665674 
8 -0.9853917 -1.29815348 -1.04445787 -0.73680402 
9 -0.3071799 -0.03335350 0.18128888 -0.46337250 
10 0.5971025 1.00148284 1.10059895 0.63035358 
내가

corr=cor(trends, all.obs) 

을 할 때

나는 오류 메시지를받을

Error in cor(trends, all.obs) : 'x' must be numeric 

이 문제를 해결하기 전에 나는 기억할 수 없으며 그 원인을 파악할 수 없습니다. 과거에는 항상 관찰 된 시계열 (all.obs의 열)과 추세 (이 경우 1 개의 추세) 간의 상관 관계를 계산할 수있었습니다. 그래서 어쩌면 내가 뭔가를 아주 누락, 나는 생각이 함께 일부터

> trends=as.numeric(trends) 
Error: (list) object cannot be coerced to type 'double' 

그것은 오랜만이야 얻었 기 때문에 나는 또한

> typeof(all.obs) 
[1] "list" 
> typeof(trends) 
[1] "list" 

했다

> is.numeric(trends) 
[1] FALSE 
> is.numeric(all.obs) 
[1] FALSE 
> is.data.frame(all.obs) 
[1] TRUE 
> is.data.frame(trends) 
[1] TRUE 

을 확인했습니다 분명한?

+0

목록을 벡터로 만들려면 'unlist'를 시도하십시오. 숫자가 아닌 경우 숫자로 변환하십시오. –

+1

'cor (cbind (trends, all.obs))'는'trends'의 한 열과'all.obs'의 모든 열을 포함하는 상관 행렬을 제공합니다. 그것은 가장 간단한 해결 방법 일 수 있습니다. – thelatemail

답변

3

trendsall.obs의 모든 열이 숫자로 저장되어 있는지 확인하십시오.

sapply(trends, is.numeric)sapply(all.obs, is.numeric)을 실행하십시오. 출력에 FALSE이 표시되면 as.numeric() 기능의 도움으로 숫자로 강제 변환하여 수정해야합니다.

또는 이런 종류의 문제를 피하는 더 좋은 방법은 csv 파일을 읽을 때 열 유형을 지정하는 것입니다. read.csv 함수의 colClasses 매개 변수를 사용하면됩니다. 예 :

trends <- read.csv("PATH_TO_DATA_FOLDER/trends.csv", colClasses = "numeric") 
all.obs <- read.csv("PATH_TO_DATA_FOLDER/all_obs.csv", colClasses = rep("numeric", 4)) 

충분하면 참조하십시오.

+0

제공된 솔루션이 문제를 해결하지 못했지만 솔루션으로 안내해 주므로 답변으로 받아 들일 것입니다. colClasses (오류가 발생하여 더 많은 sleuthing을 생성 함)를 사용하여 .csv 파일에 "불완전한 최종 행"이 있음을 알았습니다 (이 파일은 R에 의해 생성 된 파일이므로 이제는 배웠습니다. !) – Geraldine

+0

사용 된 colClasses = "숫자", 매력처럼 작동했습니다. 감사합니다 .-) – VishnuVardhanA