3-6. 반복문, ifelse-binning + 빈도분석, 데이터합치기(rbind, cbind, merge)
2019. 2. 17. 16:59
3-5. 반복문, ifelse-binning + 빈도분석, 데이터합치기(rbind, cbind, merge)
반복문을 이용해 빈 리스트, 빈 메트릭스 만들고 채워넣기
# 1. 빈 리스트 만들고 채워넣기
a <- c()
a
## NULL
# 2. 빈 리스트에 1부터 10까지 채워넣기
for ( i in 1:10 ){
a[i] <- i
}
a
## [1] 1 2 3 4 5 6 7 8 9 10
# 3. 빈 matrix 만들기
m <- matrix(0, 10, 10) # matrix(넣을 값, m, n)
m
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 0 0 0 0 0 0 0 0 0 0
## [2,] 0 0 0 0 0 0 0 0 0 0
## [3,] 0 0 0 0 0 0 0 0 0 0
## [4,] 0 0 0 0 0 0 0 0 0 0
## [5,] 0 0 0 0 0 0 0 0 0 0
## [6,] 0 0 0 0 0 0 0 0 0 0
## [7,] 0 0 0 0 0 0 0 0 0 0
## [8,] 0 0 0 0 0 0 0 0 0 0
## [9,] 0 0 0 0 0 0 0 0 0 0
## [10,] 0 0 0 0 0 0 0 0 0 0
# 4. 이중 반복문을 이용해 matrix 채워넣기
for ( i in 1:10 ){
for ( j in 1:10){
m[i, j] <- i*j
}
}
m
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 2 3 4 5 6 7 8 9 10
## [2,] 2 4 6 8 10 12 14 16 18 20
## [3,] 3 6 9 12 15 18 21 24 27 30
## [4,] 4 8 12 16 20 24 28 32 36 40
## [5,] 5 10 15 20 25 30 35 40 45 50
## [6,] 6 12 18 24 30 36 42 48 54 60
## [7,] 7 14 21 28 35 42 49 56 63 70
## [8,] 8 16 24 32 40 48 56 64 72 80
## [9,] 9 18 27 36 45 54 63 72 81 90
## [10,] 10 20 30 40 50 60 70 80 90 100
wakefield - r_data_frame으로 무작위 dataframe(tibble)만들기
ifelse로 바이닝하기(2번째 ifelse부터 조심)
범주형 데이터의 빈도분석
# install.packages("wakefield")
library(wakefield)
# 랜덤 데이터프레임 생성
temp_data <- r_data_frame(n=250, # n수
age( x=30:78, name="Age"), # age() 랜덤
sex( x=c("male","female"), prob=c(0.7,0.3), name="Sex") # sex랜덤과 비율
)
head(temp_data)
## # A tibble: 6 x 2
## Age Sex
## <int> <fct>
## 1 75 male
## 2 37 male
## 3 45 male
## 4 52 male
## 5 31 male
## 6 73 male
# ifelse로 Binning하기
# - 첫번째 else자리에만 Age로 인해 다 차있다. 2번째부터는 새로 생성한 칼럼명을 else자리에 넣어야한다. 왜냐하면, 2번째 조건인 40대에 안걸리면, 첫번째 조건 30대 것도 기존 Age(나이)가 다시 대입되어버린다. 앞에서 바꿔놓은 연령대(Age2)가 그대로 들어가야한다.
temp_data$Age2 <- ifelse( temp_data$Age >= 30 & temp_data$Age < 40, 3, temp_data$Age)
temp_data$Age2 <- ifelse( temp_data$Age >= 40 & temp_data$Age < 50, 4, temp_data$Age2)
temp_data$Age2 <- ifelse( temp_data$Age >= 50 & temp_data$Age < 60, 5, temp_data$Age2)
temp_data$Age2 <- ifelse( temp_data$Age >= 60 & temp_data$Age < 70, 6, temp_data$Age2)
temp_data$Age2 <- ifelse( temp_data$Age >= 70 & temp_data$Age < 80, 7, temp_data$Age2)
head(temp_data)
## # A tibble: 6 x 3
## Age Sex Age2
## <int> <fct> <dbl>
## 1 75 male 7
## 2 37 male 3
## 3 45 male 4
## 4 52 male 5
## 5 31 male 3
## 6 73 male 7
# 범주형 Age2, sex의 빈도분석 by table, prop.table( table() )
# - 비율을 알려면, prop.table()안에 table()해놓은 것을 넣어야한다.
table( temp_data$Age2 )
##
## 3 4 5 6 7
## 48 54 62 52 34
prop.table(table( temp_data$Age2 ) )
##
## 3 4 5 6 7
## 0.192 0.216 0.248 0.208 0.136
table( temp_data$Sex )
##
## male female
## 174 76
prop.table(table( temp_data$Sex ) )
##
## male female
## 0.696 0.304
merge
# 데이터 만들기
df1<-data.frame(name = c('Park','Lee','Kim','Kang'),
gender = c('f','m','f','m'))
df2<-data.frame(name = c('Min','Ahn','Choi','Kyeon'),
gender = c('m','m','f','f'))
df1; df2 # 데이터 2개를 연달아서 확인하기 -> df1 과 df2는 name의 교집합 없음
## name gender
## 1 Park f
## 2 Lee m
## 3 Kim f
## 4 Kang m
## name gender
## 1 Min m
## 2 Ahn m
## 3 Choi f
## 4 Kyeon f
# 1. rbind(rowbind) 와 cbind(column bind)
rbind(df1,df2) # 행으로서 연결한다. (칼럼수, 칼럼명 같아야함)
## name gender
## 1 Park f
## 2 Lee m
## 3 Kim f
## 4 Kang m
## 5 Min m
## 6 Ahn m
## 7 Choi f
## 8 Kyeon f
cbind(df1,df2) # 칼럼으로서 옆에 붙는다. (row수 같아야함)
## name gender name gender
## 1 Park f Min m
## 2 Lee m Ahn m
## 3 Kim f Choi f
## 4 Kang m Kyeon f
df3<-data.frame(name = c('Yoon', 'Seo', 'Park', 'Lee', 'Kim', 'Kang'),
age = c(30, 31, 22, 24, 28, 25))
df4<-data.frame(name = c('Park', 'Lee', 'Kim', 'Kang', 'Ahn', 'Go'),
gender=c('f', 'f', 'm', 'm', 'f', 'm'),
city = c('Seoul', 'Incheon', 'Seoul',
'Busan', 'Gwangju', 'Deagu'))
df3;df4 # 6개 중에 4개 name은 겹친다.
## name age
## 1 Yoon 30
## 2 Seo 31
## 3 Park 22
## 4 Lee 24
## 5 Kim 28
## 6 Kang 25
## name gender city
## 1 Park f Seoul
## 2 Lee f Incheon
## 3 Kim m Seoul
## 4 Kang m Busan
## 5 Ahn f Gwangju
## 6 Go m Deagu
merge(df3, df4, by="name" , all=FALSE) # all=FALSE는 Inner join으로서 교집합
## name age gender city
## 1 Kang 25 m Busan
## 2 Kim 28 m Seoul
## 3 Lee 24 f Incheon
## 4 Park 22 f Seoul
merge(df3, df4, by="name" , all.x=TRUE) # all.x=TRUE는 LEFT join
## name age gender city
## 1 Kang 25 m Busan
## 2 Kim 28 m Seoul
## 3 Lee 24 f Incheon
## 4 Park 22 f Seoul
## 5 Seo 31 <NA> <NA>
## 6 Yoon 30 <NA> <NA>
merge(df3, df4, by="name" , all.y=TRUE) # all.x=TRUE는 RIGHT join
## name age gender city
## 1 Kang 25 m Busan
## 2 Kim 28 m Seoul
## 3 Lee 24 f Incheon
## 4 Park 22 f Seoul
## 5 Ahn NA f Gwangju
## 6 Go NA m Deagu
merge(df3, df4, by="name" , all=TRUE) # all=TRUE Full outer join으로서 합집합
## name age gender city
## 1 Kang 25 m Busan
## 2 Kim 28 m Seoul
## 3 Lee 24 f Incheon
## 4 Park 22 f Seoul
## 5 Seo 31 <NA> <NA>
## 6 Yoon 30 <NA> <NA>
## 7 Ahn NA f Gwangju
## 8 Go NA m Deagu
'한의대 생활 > └ 통계에 대한 나의 정리' 카테고리의 다른 글
4. Rmarkdown - 상관계수와 산점도 matrix (0) | 2019.02.19 |
---|---|
4. 상관계수 정리 (1) | 2019.02.18 |
3-5. 확률변수 , 확률분포, 그리고 대표적 확률분포 (0) | 2019.02.17 |
3-4. Rmarkdown 후향적 코호트 연구와 Propensity Score Matching(PSM) (0) | 2019.02.16 |
3-3 Rmarkdown 이상치와 결측치 (0) | 2019.02.16 |