오랜만에 R을 써서 그런지 많은 함수와.. 사용법을 잊어버렸다.. 이것은 파이썬 덕분....... 따라서 이를 정리해본다.

1. 데이터 불러오기

먼저 readr 패키지로 csv 파일을 불러오자.

library(readr)

root_path <- 'C:\\Users\\LG\\Desktop\\data_set'
df <- read_csv(file.path(root_path, 'word.csv'))

출력 결과이다.

Parsed with column specification:
cols(
  id = col_double(),
  sex = col_double(),
  bday = col_date(format = ""),
  overall = col_double(),
  supervisor = col_double(),
  conditions = col_double(),
  colleagues = col_double(),
  workplace = col_double(),
  tasks = col_double()
)
> df
# A tibble: 50 x 9
      id   sex bday       overall supervisor conditions colleagues workplace tasks
   <dbl> <dbl> <date>       <dbl>      <dbl>      <dbl>      <dbl>     <dbl> <dbl>
 1     1     1 1999-08-04      65         47         53         74        49    54
 2     2     0 2000-01-16      58         79         73         72        41    46
 3     3     1 1999-07-16       0         32         10         25         9    30
 4     4     0 1999-09-03      80         53         71         67        52    37
 5     5     1 1999-05-22      56         52         21         31        50    46
 6     6     0 1999-10-19      93         92         45         80       100    77
 7     7     1 2000-02-05      45         57         44         55        19    47
 8     8     1 1998-08-01      61         63         77         81        63    49
 9     9     0 2000-01-09      68         63         49         76        39    99
10    10     0 1999-09-19      71         66         69         81        53    62
# ... with 40 more rows

2. 컬럼 추가

성별이 0일 경우 여성, 성별이 1일 경우 남성으로 나타낸 컬럼을 추가해본다.

먼저 dplyr 패키지를 설치한다.

install.packages("dplyr")

이제 데이터 프레임에 컬럼을 추가해보자. 컬럼 생성은 mutate() 함수를 사용한다. 함수 사용시 mutate(새로 생성할 컬럼명 = 값/조건)으로 입력하는데 이 때, 조건일 경우 조건 설정에 if_else, case_when 2가지 방법을 사용할 수 있다.

library(dplyr)

buff = 0
if(buff == 0) {
  new_df <- df %>%
    mutate(sex_desc = if_else(sex == 0, 'Female', 'Male'))
} else {
  new_df <- df %>%
    mutate(sex_desc = case_when(sex == 0 ~ 'Female',
                                TRUE ~ 'None'))
}
new_df

컬럼 추가 결과이다.

> new_df
# A tibble: 50 x 10
      id   sex bday       overall supervisor conditions colleagues workplace tasks sex_desc
   <dbl> <dbl> <date>       <dbl>      <dbl>      <dbl>      <dbl>     <dbl> <dbl> <chr>   
 1     1     1 1999-08-04      65         47         53         74        49    54 male    
 2     2     0 2000-01-16      58         79         73         72        41    46 Female  
 3     3     1 1999-07-16       0         32         10         25         9    30 male    
 4     4     0 1999-09-03      80         53         71         67        52    37 Female  
 5     5     1 1999-05-22      56         52         21         31        50    46 male    
 6     6     0 1999-10-19      93         92         45         80       100    77 Female  
 7     7     1 2000-02-05      45         57         44         55        19    47 male    
 8     8     1 1998-08-01      61         63         77         81        63    49 male    
 9     9     0 2000-01-09      68         63         49         76        39    99 Female  
10    10     0 1999-09-19      71         66         69         81        53    62 Female  

그런데 혹시라도 3, 4 등과 같은 이상치가 발생될 수 있으므로 조건을 정확히 설정하고 예외 숫자를 다르게 표현할 수 있게 하는 것을 추천한다. 아래는 case_when을 사용한 예제이다. (이 때, 0일 때는 여성, 1일 때는 남성, 나머지는 None으로 처리한다.)

new_df <- df %>%
  mutate(sex_desc = case_when(sex == 0 ~ 'Female',
                              sex == 1 ~ 'male',
                                TRUE ~ 'None'))

4. 컬럼 순서 재정렬하기

이제 새롭게 생성된 컬럼를 성별 바로 뒤로 올 수 있도록 컬럼 재정렬을 해본다.
직접 컬럼 벡터 사용, select()함수를 사용하는 2가지 방법으로 컬럼을 재정렬할 수 있다.
**위 2가지 방법 모두 컬럼명을 이용해 재졍렬 순서를 입력하면 된다.

# library(dplyr)
buff = 0
if(buff == 0) {
  new_columns_order = c('id', 'sex', 'sex_desc', 'bday',
                        'overall', 'supervisor', 'conditions',
                        'colleagues', 'workplace', 'tasks')
  new_df <- new_df[new_columns_order]
} else {
  new_df <- new_df %>%
    select(id, sex, sex_desc, bday,
           overall, supervisor, conditions,
           colleagues, workplace, tasks)
}
new_df

아래는 재정렬된 결과이다.

> new_df
# A tibble: 50 x 10
      id   sex sex_desc bday       overall supervisor conditions colleagues workplace tasks
   <dbl> <dbl> <chr>    <date>       <dbl>      <dbl>      <dbl>      <dbl>     <dbl> <dbl>
 1     1     1 male     1999-08-04      65         47         53         74        49    54
 2     2     0 Female   2000-01-16      58         79         73         72        41    46
 3     3     1 male     1999-07-16       0         32         10         25         9    30
 4     4     0 Female   1999-09-03      80         53         71         67        52    37
 5     5     1 male     1999-05-22      56         52         21         31        50    46
 6     6     0 Female   1999-10-19      93         92         45         80       100    77
 7     7     1 male     2000-02-05      45         57         44         55        19    47
 8     8     1 male     1998-08-01      61         63         77         81        63    49
 9     9     0 Female   2000-01-09      68         63         49         76        39    99
10    10     0 Female   1999-09-19      71         66         69         81        53    62

5. 데이터 저장하기

아래 코드는 저번 포스트와 동일

#library(readr)
write_csv(new_df, file.path(root_path, 'word_add_sex_desc.csv'))

'R > 기본' 카테고리의 다른 글

R로 .csv 형식 저장하기  (0) 2020.06.06
R로 .sav 파일 읽기  (0) 2020.06.06

readr 패키지를 사용하여 데이터 프레임을 .csv 파일로 저장해본다.

1. 패키지 설치

install.packages("readr")

2. .csv/.tsv로 저장하기

write_csv(쉼표 구분) 말고도 write_delim() 함수를 사용하면 delimeter를 직접 선정할 수 있다.
이 때, delimeter는 반드시 한 개로 해야 한다.

library(readr)

root_path <- 'C:\\Users\\LG\\Desktop\\data_set'
write_csv(df, file.path(root_path, 'word.csv'))
write_tsv(df, file.path(root_path, 'word.tsv'))

참고

https://readr.tidyverse.org/reference/write_delim.html

'R > 기본' 카테고리의 다른 글

data-frame에 컬럼 추가/정렬하기  (0) 2020.06.06
R로 .sav 파일 읽기  (0) 2020.06.06

.sav를 읽을 수 있게 하는 패키지는 많이 존재하지만 haven 패키지는 tidyverse에서 소개했기 때문에 이 패키지를 사용하기로 결정했다.

1. 패키지 설치

install.packages("haven")

2. 패키지 사용한 .sav 파일 읽기

haven 패키지의 함수 read_sav() 사용

library(haven)

root_path = 'C:\\Users\\LG\\Desktop\\data_set'
file_name = 'work.sav'
full_path = file.path(root_path, file_name)
df = read_sav(full_path)
df

3. 결과 확인

> df
# A tibble: 50 x 9
      id        sex bday                     overall supervisor conditions colleagues           workplace     tasks
   <dbl>  <dbl+lbl> <date>                 <dbl+lbl>  <dbl+lbl>  <dbl+lbl>  <dbl+lbl>           <dbl+lbl> <dbl+lbl>
 1     1 1 [Male]   1999-08-04 65                            47         53         74  49                        54
 2     2 0 [Female] 2000-01-16 58                            79         73         72  41                        46
 3     3 1 [Male]   1999-07-16  0 [Totally disagree]         32         10         25   9                        30
 4     4 0 [Female] 1999-09-03 80                            53         71         67  52                        37
 5     5 1 [Male]   1999-05-22 56                            52         21         31  50                        46
 6     6 0 [Female] 1999-10-19 93                            92         45         80 100 [Totally agree]        77
 7     7 1 [Male]   2000-02-05 45                            57         44         55  19                        47
 8     8 1 [Male]   1998-08-01 61                            63         77         81  63                        49
 9     9 0 [Female] 2000-01-09 68                            63         49         76  39                        99
10    10 0 [Female] 1999-09-19 71                            66         69         81  53                        62

위에서 데이터 옆 대괄호 내용은 SPSS의 변수보기 탭의 '값'열에 해당한다.

참고

https://cran.r-project.org/web/packages/haven/haven.pdf

'R > 기본' 카테고리의 다른 글

data-frame에 컬럼 추가/정렬하기  (0) 2020.06.06
R로 .csv 형식 저장하기  (0) 2020.06.06

+ Recent posts