데이터프레임에서 변수를 읽어 들이는 방법은 여러 가지가 있습니다.
이렇게 읽어들이 변수명들을 이용하여 새로운 변수를 만든다.
이를 이용하여 새로운 외부 파일을 만들거나, 추출하기도 합니다.
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)] # 변수 gender와 edu 제외하기
dataf03[1:3,]
dataf03[1:3,c(2,5)]
dataf03["gender"]
dataf03[c("gender","edu")]
dataf03[,names(dataf03) %in% c("gender","edu")] # 변수 gender와 edu 추출하기
dataf03[,!names(dataf03) %in% c("gender","edu")] # 변수 gender와 edu 제외하기
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) 합계구하기 |
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 |
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
|
> cor(survey$age,survey$wage) # 상관계수 구하기 > 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: 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) 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 |
'R연습 200제 > 02_00. (R)데이터객체,벡터,행렬' 카테고리의 다른 글
제4강 4.5 팩터(factor) 모든 것 - factor, nlevels, levels, ref (0) | 2020.09.14 |
---|---|
제4강 4.3 리스트 다루기 (0) | 2020.07.25 |
제4강 4.1 데이터프레임 다루기 (0) | 2020.07.25 |
(R1)제03강(4.1) 배열(array) 다루기 (0) | 2020.07.25 |
(R1)제03강(3.2) 행렬 연산 하기 - 행렬 +/-, 기술통계량, apply 사용하기 (0) | 2020.07.25 |