728x90

데이터프레임에서 변수를 읽어 들이는 방법은 여러 가지가 있습니다.

이렇게 읽어들이 변수명들을 이용하여 새로운 변수를 만든다.

이를 이용하여 새로운 외부 파일을 만들거나, 추출하기도 합니다.

 

1. 위치번호로 요소 접근하기

 

> health[1,]

> health[1:2,]

> health[,2]

> health[,2:3]

 

(실습)

1. 데이터프레임(health) 에서 1 번째 관측치를 프린트하기

2. 데이터프레임 health 에서 1~2 번째 관측치를 프린트하기

3. 두 번째 변수 hei를 프린트하기.

4. ~세 번째 변수 hei, wei를 프린트하기

 

(실행결과 및 설명)

 

> health[1,]
데이터프레임(health) 에서 1 번째 관측치를 프린트합니다.

gender hei wei hei_wei

1 F 161 45 16145

 

> health[1:2,]
데이터프레임 health 에서 1~2 번째 관측치를 프린트합니다.

gender hei wei hei_wei

1 F 161 45 16145

2 F 162 49 16249

 

> health[,2]
# 두 번째 변수 hei를 프린트합니다.

[1] 161 162 163 164 161 162 163 164

 

> health[,2:3]
# ~세 번째 변수 hei, wei를 프린트합니다.

 

hei wei

1 161 45

2 162 49

3 163 53

4 164 67

5 161 72

6 162 72

7 163 73

8 164 74

2. 변수명으로 요소 접근하기

 

> health$gender

> health$hei

> health[gender]

> health[,gender]

 

> health$gender
# 데이터프레임 health 에서 gender 변수를 프린트합니다.

[1] F F M M F F M M

Levels: F M

 

> health$hei

# 데이터프레임 health 에서 hei 변수를 프린트합니다.

 

 

3. 새로운 변수를 만들기

 

이제 데이터프레임에서 새로운 변수를 만들거나 변경하는 방법을 다룹니다. 일단 health 을 이용하여 새로운 n_health 만든다. 그리고 키(n_health$hei)100을 곱하고 몸무게(n_health$wei)를 더하여 새로운 변수(n_health$hei_wei)를 만든다.

 

1 > dataf21 <- hei_wei; dataf21

2 > heiwei100 <- dataf21$hei*100+dataf21$wei

3 > heiwei100 <- with(dataf21,hei*100+wei)

4 > #as.data.frame(hei_wei)

5 > #is.vector(hei_wei)

6 > dataf21 <- cbind(dataf21,heiwei100); dataf21

7 > write.table(dataf21,"d:/sample_r/heiwei100.csv",sep=",",row.names=F)

 

 

# 변수 만들기

hei_wei <- read.table(file='d:/sample_r/hei_wei.txt',header=T)

hei_wei

n_heiwei <- hei_wei

n_heiwei$health <- (n_heiwei$hei-110)*0.9-n_heiwei$wei

n_heiwei

 

4. 데이터프레임에서 추출하기와 합치기

성별, , 몸무게로 구성된 외부 텍스트파일 hei_wei.txt를 만든다. 조건을 지정하거나 subset 함수를 이용합니다.

 

(1) 데이터프레임에서 추출하기

 

dataf02 <- read.csv("d:/r_class/survey_h.csv",header=T)

dataf03 <- dataf02

dataf03

dataf03[2]

dataf03[c(2,5)]

dataf03[-2] # gender 제외하가

dataf03[-c(2,5)] # 변수 genderedu 제외하기

 

dataf03[1:3,]

dataf03[1:3,c(2,5)]

dataf03["gender"]

dataf03[c("gender","edu")]

 

dataf03[,names(dataf03) %in% c("gender","edu")] # 변수 genderedu 추출하기

dataf03[,!names(dataf03) %in% c("gender","edu")] # 변수 genderedu 제외하기

 

dataf03$gender

dataf03$work

 

 

 

(2) 데이터프레임 합치기

 

두개의 데이터프레임을 아래 위로 합치기 rbind 

 

gender <- c("F","F","M","M")

hei <- c(161,162,163,164)

wei <- c(72,72,73,74)

df3 <- data.frame(gender,hei,wei)

df3

rdf1 <- rbind(cdf1,df3) # 두개의 데이터프레임을 아래 위로 합치기

rdf1

 

 

두 개의 데이터프레임 dataf_a dataf_b를 아래위로(세로) 합쳐서 dataf_ab 이라는 데이터프레임을 만드는 작업입니다.

 

(1) 데이터프레임 dataf_a dataf_b를 만들기

 

앞에서 만든 cdf1 에 아래위로(세로)로 합칠 새로운 데이터프레임 df3를 만든다.

 

> gender <- c("F","F","F","F")

> hei <- c(161,162,163,164)

> dataf_a <- data.frame(gender,hei)

> dataf_a

-----------------------------------------

gender hei

1 F 161

2 F 162

3 F 163

4 F 164

-----------------------------------------

 

> gender <- c("M","M","M","M")

> hei <- c(171,172,173,174)

> dataf_b <- data.frame(gender,hei)

> dataf_b

-----------------------------------------

gender hei

1 F 171

2 F 172

3 F 173

4 F 174

-----------------------------------------

 

(2) 데이터프레임 dataf_ab 만들기(dataf_a dataf_b 아래 위로 붙이기)

 

> dataf_ab <- rbind(dataf_a, dataf_b)

> dataf_ab

gender hei wei

gender hei

1 F 161

2 F 162

3 F 163

4 F 164

5 F 171

6 F 172

7 F 173

8 F 174

 

 

 

두 개의 데이터프레임 옆으로 합치기 - cbind

 

 

gender <- c("F","F","M","F","M","F","M")

hei <- c(155,160,165,170,175,170,169)

dataf1 <- data.frame(gender,hei)

df1

-----------------------------------------

gender hei

1 F 161

2 F 162

3 F 163

4 F 164

-----------------------------------------

 

 

(1) 데이터프레임 dataf_a (gendder hei) dataf_c(hei) 를 만들기

 

wei <- c(58,60,63,68,70,66,67)

dataf2 <- data.frame(wei)

dataf3 <- cbind(dataf1,dataf2) # 두개의 데이터프레임을 옆으로 붙이기(gener/hei + wei)

-----------------------------------------

wei

1 45

2 49

3 53

4 67

 

 

데이터프레임 dataf_ac 만들기(dataf_a dataf_c 옆으로 붙이기)

 

몸무게로 구성된 새로운 데이터프레임 dataf_c 을 만들어, 앞에서 만든 데이터프레임 dataf_a 와 옆으로 합치는 작업을 합니다.

 

> dataf_ac <- cbind(dataf_a,dataf_c)

> dataf_ac

-----------------------------------------

gender hei wei

1 F 161 45

2 F 162 49

3 M 163 53

4 M 164 67

-----------------------------------------

 

df1 의 성별, 키에 df2 의 몸무게가 옆으로 붙어있는 것을 확인할 수 있습니다.

 

 

데이터프레임 통계분석

 

벡터에서 기술통계량을 구하던 함수를 데이터프레임에서도 그대로 사용할 수 있습니다.

 

데이터프레임 기술통계량 구하기

 

함수명 기능

sum(vec01) 합계구하기
mean(vec01) 평균구하기
vec01-mean(vec01) 평균과의 차이구하기
median(vec01) 중앙값 구하기
min(vec01) 최소값 구하기
max(vec01) 최대값 구하기
sd(vec01) 표준편차 구하기
var(vec01) 분산 구하기
range(vec01) 최소값과 최대값 구하기
diff(range(vec01)) 범위구하기
quantile(vec01) 4분위수 구하기
IQR(vec01) 4분위수 범위 Q3-Q1
summary(vec01) 요약통계 구하기 

 

survey <- read.table("d:/sample_r/survey_h.txt",header=T);survey

attach(survey)

sum(wage) # 합계구하기

mean(wage) # 평균구하기

wage-mean(wage) # 평균과의 차이구하기

median(wage) # 중앙값 구하기

min(wage) # 최소값 구하기

max(wage) # 최대값 구하기

sd(wage) # 표준편차 구하기

var(wage) # 분산 구하기

range(wage) # 최소값과 최대값 구하기

diff(range(wage)) # 범위구하기

quantile(wage) # 4분위수 구하기

IQR(wage) # 4분위수 범위 Q3-Q1

summary(wage) # 요약통계 구하기; 벡터,행렬,요인,데이터프레임

 

 

1 survey <- read.table("d:/sample_r/survey_h.txt",header=T);survey

 

> sum(wage) # 합계구하기

[1] 2201

> mean(wage) # 평균구하기

[1] 55.025

> wage-mean(wage) # 평균과의 차이구하기

[1] -13.025 -13.025 -12.025 -10.025 -10.025 -8.025 -6.025 -5.025 -4.025 -3.025 -11.025 -10.025 -9.025 -8.025

[15] -3.025 -1.025 6.975 6.975 4.975 5.975 -8.025 -6.025 -4.025 -2.025 -0.025 1.975 1.975 1.975

[29] 8.975 7.975 -12.025 -8.025 -7.025 -3.025 0.975 15.975 22.975 26.975 23.975 37.975

 

> median(wage) # 중앙값 구하기

[1] 52

> min(wage) # 최소값 구하기

[1] 42

> max(wage) # 최대값 구하기

[1] 93

> sd(wage) # 표준편차 구하기

[1] 11.81587

> var(wage) # 분산 구하기

[1] 139.6147

 

> range(wage) # 최소값과 최대값 구하기

[1] 42 93

 

> diff(range(wage)) # 범위구하기

[1] 51

 

> quantile(wage) # 4분위수 구하기

0% 25% 50% 75% 100%

42.00 47.00 52.00 60.25 93.00

 

> IQR(wage) # 4분위수 범위 Q3-Q1

[1] 13.25

 

> summary(wage) # 요약통계 구하기

Min. 1st Qu. Median Mean 3rd Qu. Max.

42.00 47.00 52.00 55.02 60.25 93.00

데이터프레임과 통계분석기법

 

데이터프레임을 이용하여 여러 가지 통계분석기법을 적용하여 살펴보기로 합니다.

 

t 검정 실행하기

> t.test(hei~gender) 

Welch Two Sample t-test 

data: hei by gender

t = -3.4499, df = 2.884, p-value = 0.04351

alternative hypothesis: true difference in means is not equal to 0

95 percent confidence interval:

-21.3826796 -0.6173204

sample estimates:

mean in group F mean in group M

160 171

 

 

1 survey <- read.table("d:/sample_r/survey_h.txt",header=T);survey
2 t.test(survey$wage~survey$gender)

Welch Two Sample t-test

 data: survey$wage by survey$gender

t = -2.8938, df = 31.077, p-value = 0.006901

alternative hypothesis: true difference in means is not equal to 0

95 percent confidence interval:

-16.091569 -2.787219

sample estimates:

mean in group F mean in group M

49.83333 59.27273

 

 상관계수 구하기 

1 survey <- read.table("d:/sample_r/survey_h.txt",header=T);survey
2 cor(survey$age,survey$wage) # 상관계수 구하기
3 cor(survey$age,survey$wage,method="pearson")
4 cor.test(survey$age,survey$wage) # 상관계수와 검정통계량 구하기
5 cov(survey$age,survey$wage) # 공분산 구하기
6 var(survey$age,survey$wage) # 공분산 구하기

 

> cor(survey$age,survey$wage) # 상관계수 구하기
[1] 0.9496433

 > cor(survey$age,survey$wage,method="pearson")

[1] 0.9496433

method=“pearson” 을 지정하여 Pearson 상관계수를 구합니다.

kendall, spearman 옵션을 지정할 수 있습니다.

 

 > cor.test(health$hei,health$wei) 

Pearson's product-moment correlation

 

data: survey$age and survey$wage

t = 18.683, df = 38, p-value < 2.2e-16

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:

0.9062121 0.9732447

sample estimates:

cor

0.9496433

 

> cov(survey$age,survey$wage) # 공분산 구하기

[1] 83.07051 

 

회귀분석 하기

 

lm(wei~hei+age)

Call:
lm(formula = wei ~ hei + age)

 Coefficients:

(Intercept) hei age

-38.99135 0.61902 0.01811

 

1 survey <- read.table("d:/sample_r/survey_h.txt",header=T);survey
2 lm(survey$wage~survey$age)
3 lm(survey$wage~survey$age+survey$edu)

 

2 > lm(survey$wage~survey$age)
Call:
lm(formula = survey$wage ~ survey$age)

Coefficients:

(Intercept) survey$age

10.692 1.516

 

3 > lm(survey$wage~survey$age+survey$edu) 

Call:

lm(formula = survey$wage ~ survey$age + survey$edu)

 

Coefficients:

(Intercept) survey$age survey$edu

7.706 1.439 1.423

 

 

 

 

+ Recent posts