반응형
table ()
- 데이터의 고유한 값들의 빈도를 계산하여 테이블로 반환
- 벡터, 요인형 데이터, 문자열 등 다양한 형태의 데이터에 대해 빈도를 계산할 수 있음
기본 예제
eg_1 <- c("A", "B", "A", "C", "B", "A", "A", "C", "B", "A") #A, B, C가 섞여 있는 임의 데이터 table (eg_1) #각 factor의 빈도 |
eg_1 A B C 5 3 2 |
table (eg_1, exclude = c("B")) # 'B'를 제외한 각 factor의 빈도 |
eg_1 A C 5 2 |
table (eg_1, exclude = c("A", "B")) # 'A',와 'B'를 제외한 각 factor의 빈도 |
eg_1 C 2 |
slam_dunk_total 데이터
사용 데이터 : Rstudio 데이터 가공 및 기초 분석 #1 (tistory.com) 참조
빈도 분석
# 전체 데이터의 유니폼 넘버 빈도 계산 table (slam_dunk_total$uniform_no) |
4 5 6 7 8 9 10 11 12 13 14 15 6 6 6 5 6 4 2 2 2 2 2 5 |
# 4번을 제외한 빈도 계산 table (slam_dunk_total$uniform_no, exclude = 4) |
5 6 7 8 9 10 11 12 13 14 15 6 6 5 6 4 2 2 2 2 2 5 |
# 4번, 5번, 6번을 제외한 빈도 계산 table (slam_dunk_total$uniform_no, exclude = c(4, 5, 6)) |
7 8 9 10 11 12 13 14 15 5 6 4 2 2 2 2 2 5 |
두 가지 변수의 조합 빈도 분석
table (slam_dunk_total$school, slam_dunk_total$age) |
17 18 19 능남 2 4 2 산왕 1 1 5 상북 5 4 3 상양 0 2 4 풍전 1 1 4 해남 1 4 4 |
- 능남고는 18세(2학년)이 4명으로 가장 많음
- 산왕고는 19세(3학년)이 5명으로 구성됨
- 상양고는 17세(1학년)이 없음
- 상북고는 17세(1학년)이 5명으로 가장 많음
# interaction 함수를 사용하여 두 필드의 조합을 생성한 후, 이를 table 함수의 입력으로 사용하여 빈도를 계산 table(interaction(slam_dunk_total$school, slam_dunk_total$age)) |
능남.17 산왕.17 상북.17 상양.17 풍전.17 해남.17 능남.18 산왕.18 상북.18 상양.18 2 1 5 0 1 1 4 1 4 2 풍전.18 해남.18 능남.19 산왕.19 상북.19 상양.19 풍전.19 해남.19 1 4 2 5 3 4 4 4 |
- 두 개의 변수(학교, 나이)를 조합한 요인형 변수 (학교명.나이)별로 빈도 반환
addmargins() + table ()
- 테이블의 행과 열에 합계를 추가하는 addmargins 함수와 데이터의 빈도를 계산하는 table 함수를 사용하여,
빈도와 행 및 열이 합계를 표시
엑셀 피벗
Rstudio
- addmargins(x, margin)
- 합계를 추가할 방향을 지정할 수 있음
- margin = 없음(생략) : 테이블의 전체 합계가 추가되며, Sum이라는 열과 행이 추가
- margin = 1: 행의 합계가 추가되며, Sum이라는 행이 추가
- margin = 2: 열의 합계가 추가되며, Sum이라는 열이 추가
# margin = 없음 addmargins(table (slam_dunk_total$school, slam_dunk_total$age) ) |
17 18 19 Sum 능남 2 4 2 8 산왕 1 1 5 7 상북 5 4 3 12 상양 0 2 4 6 풍전 1 1 4 6 해남 1 4 4 9 Sum 10 16 22 48 |
addmargins(table (slam_dunk_total$school, slam_dunk_total$age), 1) |
17 18 19 능남 2 4 2 산왕 1 1 5 상북 5 4 3 상양 0 2 4 풍전 1 1 4 해남 1 4 4 Sum 10 16 22 |
addmargins(table (slam_dunk_total$school, slam_dunk_total$age), 2) |
17 18 19 Sum 능남 2 4 2 8 산왕 1 1 5 7 상북 5 4 3 12 상양 0 2 4 6 풍전 1 1 4 6 해남 1 4 4 9 |
prop.table() + table ()
- 주어진 테이블의 총합에 대한 상대적인 비율을 계산하는 데 사용
- prop.table(x, margin)
- margin = 없음(생략) : 전체 테이블의 총합에 대한 상대 빈도를 계산
- margin = 1: 행의 합에 대한 상대 빈도를 계산
- margin = 2: 열의 합에 대한 상대 빈도를 계산
prop.table (table (slam_dunk_total$school, slam_dunk_total$age) ) |
17 18 19 능남 0.04166667 0.08333333 0.04166667 산왕 0.02083333 0.02083333 0.10416667 상북 0.10416667 0.08333333 0.06250000 상양 0.00000000 0.04166667 0.08333333 풍전 0.02083333 0.02083333 0.08333333 해남 0.02083333 0.08333333 0.08333333 |
- 총 48개의 기준으로 각 값에 대한 비율 반환 (예. 상북 17세 : 5 / 48 = 0.10416667, 상북 19세 : 3 / 48 = 0.0625)
prop.table (table (slam_dunk_total$school, slam_dunk_total$age), 1 ) |
17 18 19 능남 0.2500000 0.5000000 0.2500000 산왕 0.1428571 0.1428571 0.7142857 상북 0.4166667 0.3333333 0.2500000 상양 0.0000000 0.3333333 0.6666667 풍전 0.1666667 0.1666667 0.6666667 해남 0.1111111 0.4444444 0.4444444 |
- 학교별로 각 나이의 비율 반환 (예. 상북 17세 5명, 18세 4명, 19세 3명, 총 12명, 17세 : 5 /12 = 0.4166667)
prop.table (table (slam_dunk_total$school, slam_dunk_total$age), 2 ) |
17 18 19 능남 0.20000000 0.25000000 0.09090909 산왕 0.10000000 0.06250000 0.22727273 상북 0.50000000 0.25000000 0.13636364 상양 0.00000000 0.12500000 0.18181818 풍전 0.10000000 0.06250000 0.18181818 해남 0.10000000 0.25000000 0.18181818 |
- 나이별로 각 학교의 비율 반환 (예. 17세 총 10명, 상북 17세 : 5 / 10 = 0.50000000)
round()
- round(x, digits = 0)
- digits: 반올림할 소수점 자릿수를 지정
- 기본값은 0으로, 소수점 첫째 자리에서 반올림
- 양수를 지정하면 해당 소수점 자릿수까지 반올림하고, 음수를 지정하면 해당 자릿수 이전에서 반올림
# 100을 곱하고, 소수점 둘째 자리에서 반올림 round (prop.table (table (slam_dunk_total$school, slam_dunk_total$age) ) *100, 2) |
17 18 19 능남 4.17 8.33 4.17 산왕 2.08 2.08 10.42 상북 10.42 8.33 6.25 상양 0.00 4.17 8.33 풍전 2.08 2.08 8.33 해남 2.08 8.33 8.33 |
- 100을 곱하고, 소수점 둘째 자리에서 반올림하여, 일반적으로 사용되는 %단위로 정리됨
ceiling()과 floor()
- ceiling() 함수는 올림을 수행
- floor() 함수는 버림을 수행
- ceiling() 함수와 floor() 함수는 소수점 이하의 자릿수를 직접 지정하는 것이 아니라, 정수를 올리거나 내릴 때 사용
- 이들 함수는 주어진 숫자를 가장 가까운 큰 정수 또는 작은 정수로 반올림하지 않고 그냥 올리거나 내림
# 예시 숫자 num <- 3.14159 # ceiling() 함수로 올림 ceiled_num <- ceiling(num) print(ceiled_num) # Output: 4 # floor() 함수로 내림 floored_num <- floor(num) print(floored_num) # Output: 3 # round() 함수로 소수점 첫째 자리에서 반올림 rounded_num_1 <- round(num, digits = 1) print(rounded_num_1) # Output: 3.1 |
728x90
'데이터 분석 (with Rstudio)' 카테고리의 다른 글
R과 Python 비교 및 선택 (0) | 2023.08.13 |
---|---|
Rstudio 데이터 가공 및 기초 분석 #3 (0) | 2023.08.03 |
Rstudio 데이터 가공 및 기초 분석 #1 (0) | 2023.08.01 |
Rstudio 사분위수(Quartile) Outliers(이상치) IQR (사분범위) (0) | 2023.07.31 |
Rstudio 데이터 살펴보기 #3 (기술통계 및 데이터 분포 해석) (0) | 2023.07.30 |