R에서 데이터 다루기

R 2018. 3. 13. 10:53

변수에 스칼라 값을 넣으려면 <- 기호를 쓴다.

 

> a<-1
> a
[1] 1

 

변수에 벡터 값을 넣으려면 <-에 c() 함수를 쓴다.

 

> a<-c(1,2,3)
> a
[1] 1 2 3

 

변수에 매트릭스를 넣으려면 matrix() 함수를 쓴다. 인자로, 벡터값과 nrow, ncol을 넣는다.

 

> a<-matrix(c(10,20,30,40,50,60),2,3)
> a
     [,1] [,2] [,3]
[1,]   10   30   50
[2,]   20   40   60

 

위 예제를 보면 벡터 값이 앞열부터 순서대로 채워지는데, 첫행부터 채워지게 만들려면 byrow 옵션을 쓴다.

 

> a<-matrix(c(10,20,30,40,50,60),2,3,byrow=T)
> a
     [,1] [,2] [,3]
[1,]   10   20   30
[2,]   40   50   60

 

매트릭스의 행과 열을 바꾸고 싶으면, 즉 transpose하고 싶으면 t() 함수를 쓴다.

 

> b<-t(a)
> b
     [,1] [,2]
[1,]   10   40
[2,]   20   50
[3,]   30   60

 

매트릭스의 각 열을 변수로 한 데이터셋을 만들고 싶으면 data.frame() 함수를 쓴다. 변수 이름은 자동으로 X1, X2가 붙는다.

 

> c<-data.frame(b)
> c
  X1 X2
1 10 40
2 20 50
3 30 60

 

매트릭스가 아닌 벡터를 모아서 데이터셋을 만들 수도 있다. 각각의 벡터는 변수 이름을 가지고 있기 때문에 매트릭스 때와 달리 벡터 이름이 변수 이름이 된다.

 

> a<-c(1,2,3,4,5,6)
> b<-c(10,12,13,15,17,18)
> c<-data.frame(a,b)
> c
  a  b
1 1 10
2 2 12
3 3 13
4 4 15
5 5 17
6 6 18

 

data.frame()안에 인자로 들어갈 벡터는 몇개라도 상관없다.

 

일반적인 경우에 데이터셋을 콘솔 화면에서 타이핑해서 만드는 경우는 거의 없고, 파일을 불러들여서 만든다. 제일 많이 쓰는 데이터파일 포맷은 csv (comma-separated values)인데 R에서 csv 파일을 부를 땐 read.csv() 함수를 쓴다.

 

> data<-read.csv("testdata1.csv")
> data
   year          gdp
1  1960 3.957874e+09
2  1961 2.417238e+09
3  1962 2.813934e+09
...

 

파일 첫 줄에 변수 이름이 있고, 다른 설명이나 캡션이 없는 깔끔한 csv 파일인 경우, 별도의 옵션 설정 없이 변수 이름과 값을 불러들인다. 저장할 땐 write.csv() 함수를 쓴다. 데이터 이름과 파일 이름을 명시해야 한다.

 

> write.csv(data,file="testdata2.csv")

 

csv 외에 R에서 제공하는 데이터 포맷도 있다. RData라는 확장자를 쓰는데 RData 파일로 저장하려면 save() 함수를 쓴다.

 

> save(data,file="test.RData")

 

RData 파일을 부를 땐 load() 함수를 쓴다.

 

> load("test.RData")

 

R에서 변수를 사용할 때는 변수 이름만 쓰면 안되고 데이터셋 이름까지 써 줘야 한다. 데이터셋$변수명 이런식으로 쓴다.

> data$year
 [1] 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974
[16] 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
[31] 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
[46] 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016
Posted by jujaeuk
,