2013-07-22 3 views
2

그래서 더 큰 문제를 찾으려하고 있는데, .txt 파일에서 데이터를 가져올 때 무슨 일이 일어나고 있는지 정확히 알 수 없습니다. 내 정기적으로 시작하는 명령은 다음과 같습니다 내 데이터는 어떻게 R에 저장됩니까?

data<-read.table("mydata.txt",header=T) 
attach(data) 

그래서 내 데이터가있는 경우라고, 헤더 "Var1", "Var2""Var3" 3 열, 정확히 어떻게 다 가져? cbind()을 사용하는 것과 같이 3 개의 별도 벡터로 가져온 것처럼 결합 된 것처럼 보입니다.

큰 문제는 데이터를 수정하는 것입니다. 내 데이터 프레임의 행이 그것을 제거해야합니다 (모든 열)에 빈 공간이있는 경우 :

data <- data[complete.cases(data),] 

완벽 - 이제 원래의 데이터 프레임이 빈 슬롯을 가지고 5 점의 100 개 행을 가지고 있다고 말한다. 내 새 데이터 프레임에는 95 개의 행이 있어야합니다. 맞습니까? 그럼 난 시도하는 경우 :

> length(Var1) 
[1] 100 
> length(data$Var1) 
[1] 95 

그래서 내가 전체 데이터 프레임을 다시 썼다 라인에 영향을받지 Var1 표시된 원래의 칼럼처럼 보인다. 이것이 내가 데이터를 가져올 때 Var1, Var2Var3이라는 어딘가에 저장된 3 개의 개별 열이 있다고 믿는 이유입니다. 지금까지 내가 컬럼의 수정 된 버전을 원하는 것을 인식하는 R의 취득 등, 나는의 라인을 따라 뭔가를 할 필요가 있다고 생각 :

Var1 <- data$Var1 #Repeat for every variable 
이 나의 문제는 내가 위의 비트를 작성해야한다는 것입니다

모든 단일 변수에 대한 코드. 내가 가지고있는 데이터 프레임은 크기가 크기 때문에이 코딩 방법은 지루한 것처럼 보입니다. 매번 데이터 $를 사용하지 않고도 데이터를 변형하고 수정 된 변수를 호출 할 수있는 더 좋은 방법이 있습니까?

답변

7

read.table()은 텍스트 파일의 각 열 (변수)에 대한 구성 요소 (열)가있는 데이터 프레임으로 데이터를 읽습니다. R의 데이터 프레임은 Excel 스프레드 시트와 같으며 시트의 각 열에는 서로 다른 유형의 데이터가 포함될 수 있습니다 (R에는 단일 유형의 데이터 만 포함 할 수있는 행렬과 대조).

결과적으로 데이터는 열 단위로 읽은 다음 마치 cbind.data.frame() 메서드를 사용하여 열 단위로 바인딩 된 것과 같습니다. 이것은 실제로 어떻게 행해지지는 않습니다.세 개의 구성 요소가 포함 된 data이라는 단일 개체가 있으며 그 중 어느 것도 이름을 입력하여 액세스 할 수 없습니다 (예 : Var1). 정확히 깨끗한 세션에서이

data <- read.table("mydata.txt", header = TRUE) 
Var1 

시도 (당신이 단지의 경우,이 시도하는 새로운 세션을 시작하면 제일).

ls()을 입력하면 data 만 표시됩니다 (세션이 깨끗하다고 ​​가정). 이것은 에 대한에 대해 세 개의 기둥과 개별 객체가 있다고 생각하는 명백한 증거입니다.

여기서 실질적인 문제는 attach()이 아니며 read.table()입니다.

attach()의 사용법은 극히 적으며 보여준 것이 아닙니다. attach(data)복사본data 인 검색 경로에 배치하십시오. 핵심은 사본입니다. 검색 경로에있는 내용은 전역 환경 (작업 영역)에서 data과 동일하지 않습니다. 전역 환경의 data에 대한 변경 사항은 완전히 별개의 두 개체이기 때문에 검색 경로의 복사본에 반영되지 않습니다.

R에는 명명 된 개체를 찾는 검색 경로가 있습니다. 일반적으로 R은 객체 내부를 보지 않으므로 프롬프트에 이름을 입력하거나 직접 객체를 사용하려고 시도 할 때마다 Var1 등을 찾을 수 없습니다. attach() 오브젝트를 사용할 때 R 검색까지 오브젝트를 여는 것으로 생각할 수 있습니다. 그러나 사람들을 잡아 끄는 것은 이제는 객체 자체가 아닌 객체의 사본을보고 있다는 것입니다.

대화 형 세션에는 유용한 도우미 기능이있어 사용자가 항상 data$을 입력 할 필요가 없음을 의미합니다. 예를 들어 ?with, ?within, ?transform을 참조하십시오.

타이핑 대신 약간 attach()을 사용하지 마십시오.

+1

+1, 설명하는 좋은 방법입니다. 사실 저는 하드 카피와'.doc' 파일의 비유를 사용하여 주석에 그런 내용을 넣었습니다. – gung

3

나는 R이 파일들 에 의해 에 의해 읽혔다 고 확신한다. (실제로 모든 프로그래밍 언어가 이렇게 작동한다고 생각합니다.) 전에 불완전한 경우를 제거하기 전에 데이터 프레임을 첨부 할 수 있을지 궁금합니다. 사람들이 attach(data)에 미리 전화 할 때 당신이 묘사하는 행동은 상당히 전형적입니다. 일반적으로, 당신이 R.에 전혀 attach()를 사용하지 않는 것이 좋습니다 그러나 당신이 그것을 사용해야하는 경우 (당신 해야 경우) 다시 attach(data)를 호출 한 후 다음 첫번째detach(data) 전화 데이터 프레임을 수정하고. 이 시점에서 더 이상이 문제가 발생하지 않습니다.

참고 다른 문제 일 수 있습니다. 그러나 지금까지 제공된 정보를 기반으로 말할 수는 없습니다. 사람들이보다 효과적으로 당신을 도울 수 있도록 재현 가능한 예제를 제공하고 싶습니다. 자세한 내용은 how-to-make-a-great-r-reproducible-example을 참조하십시오.

+0

"'attach()'를 사용하지 마십시오. 요약하면됩니다. –

+0

그래, 첨부() 줄을 삭제하려고했지만 문제가 지속됩니다. attach()를 사용하지 않고 my.data $ Var1을 사용하지 않으려면 data = my.data를 인수로 사용하는 것에 대한 좋은 기사를 읽었습니다. Biostats 과정에서 R을 배웠을 때 항상 attach()를 사용 했으므로 이제는 더 잘 알게되었습니다! 그리고 재현 가능한 코드를 만드는 방법 - 최선을 다했지만, 처음부터 r에서 데이터 프레임을 만드는 방법을 알 수 없습니다. 나는 2 번째 코멘트에서 설명 할 것이다. –

+0

는 I 시도 : '에 X를

관련 문제