python pandas 모듈의 꽃인 dataframe 형식을 R로 구현해보겠다.
name <- c("하나", "두나", "세나")
age <- c(22, 20, 25)
gender <- factor(c("M", "F", "M"))
blood <- factor(c("A", "O", "B"))
patients <- data.frame(name, age, gender, blood)
patients
'''
name age gender blood
1 하나 22 M A
2 두나 20 F O
3 세나 25 M B
'''
str(patients)
'''
'data.frame': 3 obs. of 4 variables:
$ name : Factor w/ 3 levels "두나","세나",..: 3 1 2
$ age : num 22 20 25
$ gender: Factor w/ 2 levels "F","M": 2 1 2
$ blood : Factor w/ 3 levels "A","B","O": 1 3 2
'''
여기서 factor라는 것이 있는데 이는 보통 범주형 데이터일 때 많이 쓴다. 요소를 넣는다고 생각하면 된다.
벡터로 각각 저장하면서 컬럼명을 지정하고 데이터프레임 형식으로 만든다. str 값 즉 structure를 출력하면 데이터 프레임형식으로 저장되어있음을 알 수 있다.
이는 좀 귀찮은 방법이니 편한 방법을 알아보자
# edit함수 이용해 데이터프레임 생성
test<-data.frame()
test<-edit(test)
edit() 함수를 실행하면
이와 같이 엑셀화면 처럼 띄워져서 값을 입력해서 데이터프레임을 생성할 수 있다. 이를 출력하면
test
'''
var1 var2
1 1 2
2 2 5
3 3 4
'''
이와 같은 형식으로 데이터프레임이 출력됨을 알 수 있다.
다음으로 데이터프레임의 인덱싱 및 슬라이싱을 알아보자
파이썬에서는 특정 열의 값을 추출하려면 df['col'] 을 사용해서 하지만 R은 조금 다르다. R은 $를 통해 데이터 열의 값을 추출할 수 있다.
# 데이터 프레임 요소에 접근 : $, [,]
patients$name # name 속성값 출력
'''
[1] 하나 두나 세나
Levels: 두나 세나 하나
'''
patients[1, ] # 1행 값
'''
name age gender blood
1 하나 22 M A
'''
patients[, 2] # 2열 값
'''
[1] 22 20 25
'''
patients[3, 1] # 3행 1열 값
'''
[1] 세나
Levels: 두나 세나 하나
'''
patients[patients$name=="하나", ] #하나에 대한 정보 추출
'''
name age gender blood
1 하나 22 M A
'''
patients[patients$name=="하나", c("name", "age")] #하나의 이름과 나이 추출
'''
name age
1 하나 22
'''
나머진 거의 python과 동일하므로 설명을 생략하고 다만 시작값이 1이라는 점을 기억하면 된다.
그리고 R에서 제공하는 신기한 함수가 있다. 바로 attach와 detach이다.
이를 R에서 제공하는 내장 데이터셋 cars 를 이용하여 설명하겠다.
head(cars) # cars 데이터셋 확인
'''
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
'''
speed # error
attach(cars) # attach 속성을 변수로 만듬
speed # speed 변수명 이용 가능
# speed의 값 추출
detach(cars) # detach 속성의 변수사용 해제
speed # error
attach 함수는 cars의 컬럼값을 하나의 변수로 만들어주는 것이다. 이를 해제하기 위해선 detach값을 사용하여 해제시킨다. 즉, speed라는 컬럼이름이 변수로 할당되는 것이다.
다음으로 subset함수이다. 바로 코드로 설명하겠다.
# subset 일부 데이터만 추출 -> 데이터를 분리할 때 많이 사용
subset(cars, speed > 20) # 속도가 20초과인 데이터
'''
speed dist
44 22 66
45 23 54
46 24 70
47 24 92
48 24 93
49 24 120
50 25 85
'''
subset(cars, speed > 20, select = c(dist)) # 속도 20초과, dist 열 추출
'''
dist
44 66
45 54
46 70
47 92
48 93
49 120
50 85
'''
subset(cars, speed > 20, select = -c(dist)) # 속도 20초과, dist 열 제외
'''
speed
44 22
45 23
46 24
47 24
48 24
49 24
50 25
'''
데이터의 일부만 슬라이싱하는 함수이다. 이를 통해 조건에 맞는 값들을 추출할 수 있다. select 파라미터를 통해 특정 열만 추출할 수 있다.
댓글