데이터분석/R

R언어 공부 - 5

환성 2022. 12. 29. 22:40
728x90

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