R함수 파생변수 및 요약변수의 차이와
데이터전처리를 위한 R함수들을 공유드릴게요
신규생성변수의 차이
파생변수 : 기존 변수의 값을 활용해 의미부여한 변수
vs
요약변수 : 기존 변수의 단순 산술연산 등
각 케이스별 신규 변수 생성
1. 분류문제 : 명목 이항화하기
파생변수의 결과 : 1 또는 0
df=iris #데이터셋 예시
명목 이항화 방법1. ifelse()함수활용
#ifelse(조건, true일때 값, false일때값)
df [, "새변수명"] = ifelse(df$SPecies=="setosa",
yes =1, no= 0 )
명목 이항화 방법2. TRUE(1)/ FALSE(0)활용하기
#조건이 TRUE이면 1로 계산처리 : 1+0=1
#조건이 FALSE이면 0로 계산처리 : 0+0=0
df[ ,"새변수명"] = (df$Species="setosa")+0
2. 새 요약변수만들어 행합계값 넣기
df[ , "새변수명"] = apply(df[[-5],
MARGIN=1,FUN=sum)
#참고 apply함수
FUN의 연산을 행(MARGIN=1)/열(2)에 일괄 실행
3.날짜시간 처리한 파생변수만들기
#R 기본함수로 시간처리
strptime()
#"시간형태"를 지정해줌으로써 조작용이
now = strptime(df$시간변수,
"%Y-%m-%d %H%M:%S")
now$year = 숫자118
# 1900뺀수치로 #1900+118=2018
now$mon =2 #+1해준값 #2-(+1)=1월
now$mday=6 #날짜 그대로 #6일
now$hour =1 #시간 그대로
now$min=10 #분 그대로
now$sec=30 #초 그대로
now$wday = 2
#숫자0부터시작=일요일 #화요일 의미
일 월 화 수 목 금 토 일
0 1 2 3 4 5 6 0
# lubridate 패키지로 시간처리
date() #날짜만 뽑기
#기초응용 : 날짜를 다루는 열추가하기
df[,"새변수"]=date(df$날짜변수)
#심화응용 : casual(대여수)열의 값이 최대값 25가 넘는 날자는 총 며칠인가? #data=bike.csv
df[ ,"date"]=date(df$datetime) #날짜다루기
df_25 = df[df$casual>25, ] #25넘는 행만남기기
length(unique(df_25$date)) #중복제거 갯수
hour() #시간만 추출하기
#심화응용: 시간대별 casual 평균 산출시 가장 큰 시간은?
df[,"hour"]=hour(df$datetime)#시간다루기
agg=aggregate(df, casual~hour, FUN=mean)
#hour별 casual의 mean 산출하기 일괄연산
agg[which.max(agg$casual), ] #최대행 추출
#참고 aggregate 함수
aggregate(데이터셋, 처리할변수~기준변수,연산)
#결과 : 기준변수 연산처리된변수값 데이터프레임
ymd(20230316) #표준날짜형식으로 나타내기
#결과 :"2023-03-16"
wday() #요일반환하기
wday("2023-03-16", week_start=1, label=TRUE)
#요일을 1(월)요일 부터 시작 #숫자1부터 시작
월 화수 목 금 토 일 월
1 2 3 4 5 6 7 1
#실전응용
wday(ymd(date(df$시간변수)) , 1, label=TRUE)
4. fastDummies패키지로 명목변수를 더미변수로 변환해서 만들기
df=dummy_cols(df,
select_olumns="명목변수",
remove_first_dummy=TRUE, #첫더미삭제
remove_selected_columns=TRUE#원변수삭제)
5.변수간 차이를 파생변수로 만들기
df=bike.csv #데이터셋 예시
문제 : temp변수와 atemp변수간 절대값 차이를 diff라는 변수를 데이터df에 만들어 넣어라
df[,"diff"]=abs(df$temp-df$atemp)
mean(df$diff) #차이의 평균