데이터 전처리/R
자주 쓰이는 apply계열 함수 사용법 in r
JSMATH
2024. 6. 4. 19:58
apply계열 중 자주 쓰이는 3가지만 알아보겠습니다.
1. apply는 단일 벡터형태로는 사용불가능합니다
그러니까 'data = df$월'로 apply 적용이 안된다는 것이죠.
Margin | FUN의 진행방향 [1 : row , 2 : col] |
FUN | 사용 할 함수 |
df <- read.csv('C:/Users/PJS/Documents/study/schedule.csv',fileEncoding = 'CP949')
df
> df
시간 월 화 수 목 금
1 9 1,2,3 1,2,3 3 3 NA
2 10 1,2,3 1,2,3 1,3 3 NA
3 11 1,2 1,2,3 1 NA
4 12 1,2 1,2,3 1 3 NA
5 13 3 1,2 1,2 NA
6 14 2,3 1,2 1,2,3 3 NA
7 15 1,3 1,2 1 NA
8 16 1 3 1 NA
9 17 2,3 NA
10 18 2 NA
#공백을 NA로 변환
apply(df, 2, function(x) ifelse(x == "", NA, x))
> apply(df, 2, function(x) ifelse(x == "", NA, x))
시간 월 화 수 목 금
[1,] " 9" "1,2,3" "1,2,3" "3" "3" NA
[2,] "10" "1,2,3" "1,2,3" "1,3" "3" NA
[3,] "11" "1,2" "1,2,3" "1" NA NA
[4,] "12" "1,2" "1,2,3" "1" "3" NA
[5,] "13" "3" NA "1,2" "1,2" NA
[6,] "14" "2,3" "1,2" "1,2,3" "3" NA
[7,] "15" "1,3" "1,2" NA "1" NA
[8,] "16" "1" "3" NA "1" NA
[9,] "17" NA "2,3" NA NA NA
[10,] "18" "2" NA NA NA NA
다음은 lapply입니다.
2. lapply는 오로지 컬에 대한 FUN입니다. 다른 점은 list로 반환해 준다는 점입니다.
FUN | 사용 할 함수 |
> lapply(df,function(x) ifelse(x == "", NA, x))
$시간
[1] 9 10 11 12 13 14 15 16 17 18
$월
[1] "1,2,3" "1,2,3" "1,2" "1,2" "3" "2,3" "1,3" "1" NA "2"
$화
[1] "1,2,3" "1,2,3" "1,2,3" "1,2,3" NA "1,2" "1,2" "3" "2,3" NA
$수
[1] "3" "1,3" "1" "1" "1,2" "1,2,3" NA NA NA NA
$목
[1] "3" "3" NA "3" "1,2" "3" "1" "1" NA NA
$금
[1] NA NA NA NA NA NA NA NA NA NA
> lapply(df,function(x) ifelse(x == "", NA, x)) %>% typeof()
[1] "list"
3. sapply는 lapply와 과정은 똑같으나 출력이 다릅니다.
출력이 행렬 형태로 나온다.
> sapply(df,function(x) ifelse(x == "", NA, x))
시간 월 화 수 목 금
[1,] "9" "1,2,3" "1,2,3" "3" "3" NA
[2,] "10" "1,2,3" "1,2,3" "1,3" "3" NA
[3,] "11" "1,2" "1,2,3" "1" NA NA
[4,] "12" "1,2" "1,2,3" "1" "3" NA
[5,] "13" "3" NA "1,2" "1,2" NA
[6,] "14" "2,3" "1,2" "1,2,3" "3" NA
[7,] "15" "1,3" "1,2" NA "1" NA
[8,] "16" "1" "3" NA "1" NA
[9,] "17" NA "2,3" NA NA NA
[10,] "18" "2" NA NA NA NA
> sapply(df,function(x) ifelse(x == "", NA, x)) %>% typeof()
[1] "character"
> sapply(df,function(x) ifelse(x == "", NA, x)) %>% is.matrix()
[1] TRUE