DATOR


분석 준비 단계 : 분석 프로그램 입문 DataFrame Object

(1) 두 개의 Vector을 합해서 data frame 생성하기

#Data frame는 다양한 타입의 데이터를 컬럼(속성)별로 저장 가능

# 아래 예제는 첫 번째 열에는 logic, 두 번째 열에는 숫자를 저장

# ( )를 하면 실행 후 결과가 출력

> (vX1 <- c(TRUE,FALSE,TRUE))

[1] TRUE FALSE TRUE

 

#norm은 정규분포

#rrandom

#rnorm()은 정규분포로부터 데이터를 랜덤하게 추출

#rnorm(3)정규분포로부터 3개의 데이터를 랜덤하게 추출

> (vX2 <- rnorm(3))

[1] 0.6267247 0.2509510 0.5526489

 

# data.frame() 사용

> dDataFrame <- data.frame(logic=vX1, value=vX2)

 

> dDataFrame

logic value

1 TRUE 1.211912

2 FALSE -1.315087

3 TRUE 1.061087

 

# listdata.frame 로 나타 남.

> data.class(dDataFrame)

[1] "data.frame"

 

> mode(dDataFrame)

[1] "list"

 

> typeof(dDataFrame)

[1] "list"

 

 

(2)data.frame() 함수로 생성시 row의 개수가 불일치시

#3, 2, 2개에서는 생성불가능

> lidftest<-data.frame(position=c("top","down","top"),value= c(2,4),tf=c(T,F))

Error in data.frame(position = c("top", "down", "top"), value = c(2, 4), :

arguments imply differing number of rows: 3, 2

 

#3, 1, 1개 에서는 생성가능하나 1개의 length인 짧은 값이 반복 

# 아래에서 길이가 짧은 1개를 반복 

#그러므로 data.frame 가 만들어 졌다고 하여서 의도한 대로 다 만들어 진 것은 아니다. Object 안을 읽어보고 의도한데로 만들어 졌는지 확인

> lidftest<-data.frame(position=c("top","down","top"),value= c(2),tf=c(T))

> lidftest

position value tf

1 top 2 TRUE

2 down 2 TRUE

3 top 2 TRUE

 

(3) 4번째 컬럼를 character Type로 추가

> df1 <- data.frame(Col1 = c("A","B","C"), Col2 = c(10,20,30), Col3 = c(3,2,1))

 

> str(df1)

'data.frame': 3 obs. of 3 variables:

$ Col1: Factor w/ 3 levels "ABC","BC","C": 1 2 3

$ Col2: num 10 20 30

$ Col3: num 3 2 1

 

#4번째 컬럼를 생성

> df1[,4]<-as.character(df1[,1])

> str(df1)

'data.frame': 3 obs. of 3 variables:

$ Col1: Factor w/ 3 levels "ABC","BC","C": 1 2 3

$ Col2: num 10 20 30

$ Col3: num 3 2 1

$ Col4: chr "A" "B" "C“

 

2. Data frames Object 읽기

(1) 레코드 위치 속성(컬럼)의 위치를 사용,[행위치,열위치]“ 형식

data frames의 데이터에 접근하기 위해서는“[,]”기호안에 레코드()와 속성()의 번호를 입력

data frames matrix([행번호,열번호])에 적용되었던 기능이 모두 가능

Data Frame Object 에서는 아래와 같은 형식이 모두가능하다.

데이터셑 변수명 [ 레코드 인덱스번호, 속성 인덱스번호 ]

데이터셑 변수명 [ “레코드명“, ”속성명“ ]

데이터셑 변수명 [“속성명”]

데이터셋명$속성명

 

#“ ( )”를 하면 실행된 후 결과가 출력. 이는 print()함수와 동일기능

>c(TRUE,FALSE,TRUE)

[1] TRUE FALSE TRUE

 

>vx <- c(TRUE,FALSE,TRUE)

 

> (vx <- c(TRUE,FALSE,TRUE))

[1] TRUE FALSE TRUE

 

#rnormnormal 분포에서 random 하게 데이터를 추출

> (vX2 <- rnorm(3))

[1] 0.6267247 0.2509510 0.5526489

 

#logic열이름에 vX1 데이터를 저장

#value열이름에 vX2 데이터를 저장

> dDataFrame <- data.frame(logic=vX1, value=vX2)

 

 

> dDataFrame

logic value

1 TRUE 0.6267247

2 FALSE 0.2509510

3 TRUE 0.5526489

데이터셑 변수명 [ 레코드 인덱스번호, 속성 인덱스번호 ]

> dDataFrame[1,2]

[1] 0.6267247

 

#1행에,“logic”열의 값을 추출 하기 위해서는, [1,"logic"][1,1]이 동일 결과 이다.

> dDataFrame[1,"logic"]

[1] TRUE

>dDataFrame[1,1]

 

# “logic“속성명으로 열의 내용을 출력하는 방법

> dDataFrame[,"logic"]

[1] TRUE FALSE TRUE

 

> dDataFrame$logic

[1] TRUE FALSE TRUE

 

>dDataFrame[,1]

 

# “value“속성명으로 열의 내용을 추출하는 방법

> dDataFrame$value

[1] -0.1533984 1.3907009 -0.723581

> dDataFrame[,2]

>dDataFrame[,“value”]

 

(2) data.frame에서 “[ , ]“ 형식으로 하나의 열 또는 값만 추출시 vector Object가 된다.

 

> data(mtcars)

> dCar<-mtcars

> str(dCar)

'data.frame': 32 obs. of 11 variables:

$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...

$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...

$ disp: num 160 160 108 258 360 ...

$ hp : num 110 110 93 110 175 105 245 62 95 123 ...

$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...

$ wt : num 2.62 2.88 2.32 3.21 3.44 ...

$ qsec: num 16.5 17 18.6 19.4 17 ...

$ vs : num 0 0 1 1 0 1 0 1 1 1 ...

$ am : num 1 1 1 0 0 0 0 0 0 0 ...

$ gear: num 4 4 4 3 3 3 3 4 4 4 ...

$ carb: num 4 4 1 1 2 1 4 2 2 4 ...

> (vcar6 <- dCar[, 6])

[1] 2.620 2.875 2.320 3.215 3.440 3.460 3.570 3.190 3.150 3.440 3.440 4.070 3.730 3.780 5.250 5.424 5.345 2.200 1.615

[20] 1.835 2.465 3.520 3.435 3.840 3.845 1.935 2.140 1.513 3.170 2.770 3.570 2.780

> is.vector(vcar6)

[1] TRUE

 

(3) dataFrameObject변수명[ 행번호,"속성명",drop=F] 형식으로 차원을 유지

[속성명]또는 [속성번호]로 추출하는 경우 차원이 없이 하나의 vector로 추출된다.

이럴 때 행과 열의 모양을 유지하게 하는 방법, df1[ 행번호,"속성명",drop=F]

 

> df1 <- data.frame(Col1 = c("A","B","C"), Col2 = c(10,20,30), Col3 = c(3,2,1))

 

> str(df1)

'data.frame': 3 obs. of 3 variables:

$ Col1: Factor w/ 3 levels "ABC","BC","C": 1 2 3

$ Col2: num 10 20 30

$ Col3: num 3 2 1

 

 

#3번째 열을 DataFrame[ , "속성명"]형식으로 추출하면, 추출된 결과가 차원이 없는 Vector 이 된다.

> df1[ , "Col3"]

[1] 3 2 1

 

> dfcol3<- df1[ , "Col3"]

 

> mode(dfcol3)

[1] "numeric“

 

> is.vector(dfcol3)

[1] TRUE

 

# 3번째 열의 속성번호로 추출된 결과 차원이 없는 Vector 이된다.

> df1[ , 3]

[1] 3 2 1

 

> df1[1, ]

Col1 Col2 Col3

1 A 10 3

 

# 데이터가 있는 변수명[행위치, 열위치] 추출결과 차원이 없는 Vector 이된다.

> df1[3, 2]

[1] 30

 

# drop=F를 사용하여 3번째 열의 속성명으로 추출결과 차원을 유지되고, data.frame Object 이다.

> df1_dropF<-df1[,"Col3",drop=F]

Col3

1 3

2 2

3 1

 

> mode(df1_dropF)

[1] "list"

 

> data.class(df1_dropF)

[1] "data.frame"

 

> class(df1_dropF)

[1] "data.frame"

 


#위 내용은 아래 책에서  발췌


 RFundamental_cover.jpg

Tag

Leave Comments


Profile

profileanalysis에 관련된 question에 대한 Answer