1) 두 데이터 프레임 합치기
두 데이터 프레임의 열을 옆으로 이어 붙이려면 cbind를 사용한다
두 데이터 프레임의 행을 쌓으려면 rbind를 사용한다
all.cols <- cbind(df1, df2)
all.rows <- rbind(df1, df2)
# 예시
> df1 <- data.frame(x = c("a", "a"), y = c(5,6))
> df2 <- data.frame(x = c("b", "b"), y = c(9,10))
> rbind(df1, df2)
x y
1 a 5
2 a 6
3 b 9
4 b 10
2) 단일값을 다른 형식으로 변환하기
각 자료형에 대해서, 값들을 그 자료형으로 변환하는 함수가 있다
as.character(x) - 문자열로 변환 as.numeric(x) - 숫자로변환
as.complex(x) - 복소수로 변환 as.logical(x) - 논리형으로 변환
> as.numeric("3.14")
[1] 3.14
> as.integer(3.14)
[1] 3
# 논릿값에서 숫자값으로 변환 시, FALSE는 0, TRUE는 1로 바뀜
> as.numeric(FALSE)
[1] 0
3) 구조화된 자료형을 다른 형식으로 변환하기
다음 함수들은 데이터 구조로 인자를 변환한다
as.data.frame(x)
as.list(x)
as.matrix(x)
as.vector(x)
데이터 구조를 상호 변환하는 일은 조금 어려울 수 있다. 일부는 생각대로 변환하지만 나머지는 그렇지 않다
변환 | 방법 |
벡터 -> 리스트 | as.list(vec) |
벡터 -> 행렬 | 열 하나짜리 행렬 : cbind(vec), as.matrix(vec) 행 하나짜리 행렬 : rbind(vec) |
벡터 -> 데이터 프레임 | 열 하나짜리 데이터 프레임 : as.data.frame(vec) 행 하나짜리 데이터 프레임 : as.data.frame(rbind(vec)) |
리스트 -> 벡터 | unlist(lst) |
리스트 -> 행렬 | 열 하나짜리 행렬 : as.matrix(lst) 행 하나짜리 행렬 : as.matrix(rbind(lst)) |
리스트 -> 데이터 프레임 | as.data.frame(lst) |
행렬 -> 벡터 | as.vector(mat) |
행렬 -> 리스트 | as.list(mat) |
행렬 -> 데이터 프레임 | as.data.frame(mat) |
데이터 프레임 -> 벡터 | 행 하나짜리 데이터 프레임 변환 : df[1,] 열 하나짜리 데이터 프레임 변환 : df[,1] |
데이터 프레임 -> 리스트 | as.list(df) |
데이터 프레임 -> 행렬 | as.matrix(df) |
4) 리스트의 각 원소에 함수 적용하기
각 리스트의 원소에 함수를 적용하기 위해 map을 사용하면 된다
map 함수는 리스트의 원소마다 함수를 호출하게 되고 그 반환된 값을 모아서 리스트로 반환해 준다.
map_chr - 문자열 벡터 반환, map_int - 정수형 벡터 반환, map_dbl - 부동 소수점 수치형 벡터 반환
> lst <- list(a = c(1,2,3), b = c(4,5,6))
> lst %>%
+ map(mean)
$a
[1] 2
$b
[1] 5
5) 행렬의 모든 행에 함수 적용하기
apply 함수를 사용한다. 두 번째 인자를 1로 설정해 함수가 행별로 적용되도록 설정한다.
results <-apply(matrix, 1, function) # matrix는 행렬, function은 함수, 1이 아니라 2면 열별로 처리한다는 뜻
# 예시
> long <- matrix(1:15, 3, 5)
> long
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
> apply(long, 1, mean)
[1] 7 8 9
# 행렬에 행 이름이 있을 시 apply로 해당 이름을 사용할 수 있다
> rownames(long) <- c("row1", "row2", "row3")
> apply(long , 1, mean)
row1 row2 row3
7 8 9
6) 데이터 집단에 함수 적용하기
dplyr의 group_by 함수와 summarize를 사용한다.
우리의 데이터 프레임이 df고, grouping_var라는 변수를 기준으로 집단을 묶은 뒤 모든 v1, v2 조합에 대해서 함수 func을 적용하고자 할 때 다음과 같이 group_by를 사용한다.
df %>%
group_by(v1, v2)
summarize(
result_var = func(value_var)
)
# 예시
> df <- tibble(my_group =c("A", "B", "A", "B", "B","B"))
> df <- tibble(my_group =c("A", "B", "A", "B", "B","B"),value = 1:6)
> df %>%
+ group_by(my_group) %>%
+ summarize((avg_values = mean(values), tot_values = sum(values), count_values = n())
7) 조건에 따라 새로운 열 만들기
tidyverse dplyr 패키지를 사용해 , mutate로 새로운 데이터 프레임 열을 생성한 다음 case_when으로 조건부 논리를 설정한다.
~의 좌측에 조건이 위치하고, 우측에 반환하는 값이 위치한다. 각 조건은 쉼표로 구분되고, case_when은 각 조건을 평가한 다음 여러 기준 중 하나에 TRUE가 반환하는 경우 즉각 멈춘다
# 예시
> df <- data.frame(vals = 1:5)
> df %>%
+ mutate(new_vals = case_when(vals <= 2 ~ "2 or less", vals >2 & vals <= 4 ~ "2 to 4", TRUE ~ "over 4"))
#> vals new_vals
#> 1 1 2 or less
#> 2 2 2 or less
#> 3 3 2 to 4
#> 4 4 2 to 4
#> 5 5 over 4
'데이터분석 > R' 카테고리의 다른 글
R언어 공부 - 7 (0) | 2022.12.30 |
---|---|
R언어 공부 - 6 (0) | 2022.12.30 |
R언어 공부 - 4 (0) | 2022.12.27 |
R언어 공부 - 3 (0) | 2022.12.27 |
R언어 공부 - 2 (0) | 2022.12.26 |