위의 데이터를 토대로 설명하겠습니다.

 

 

1) 가독성을 위한 코딩 변경

 

① resident 컬럼을 대상으로 코딩 변경하기

table(dataset2$resident)

- 출력값 - 
 1   2   3   4   5   (거주지)
111  47  27  15  34  (빈도수)


# 거주의 값이 n일 때, n. ~시 저장
dataset2$resident2[dataset2$resident == 1] <- '1. 서울 특별시' 
dataset2$resident2[dataset2$resident == 2] <- '2. 인천 광역시'
dataset2$resident2[dataset2$resident == 3] <- '3. 대구 광역시'
dataset2$resident2[dataset2$resident == 4] <- '4. 광주 광역시'
dataset2$resident2[dataset2$resident == 5] <- '5. 부산 광역시'

 

② job 컬럼을 대상으로 코딩 변경하기 

dataset2$job2[dataset2$job == 1] <- '공무원'
dataset2$job2[dataset2$job == 2] <- '회사원'
dataset2$job2[dataset2$job == 3] <- '개인사업'

 

 

 

 

2) 척도 변경을 위한 코딩 변경

- 나이(age) 변수를 청년층, 중년층 , 장년층 으로 코딩 변경하기 

dataset2$age2[dataset2$age <= 30] <- "청년층"
dataset2$age2[dataset2$age > 30 & dataset2$age <=55] <- "중년층"
dataset2$age2[dataset2$age > 55] <- "장년층 "

 

 

 

 

3) 역코딩을 위한 코딩 변경 (survey) 활용.

- survey 에서 가장 만족한 것이 1 , 가장 불만족이 5이므로 평균을 내면 문제가 생기므로 변경해줍니다. 

survey <- dataset2$survey

rsurvey <- 6-survey # 역코딩 (5까지의 숫자이므로 6-n)

dataset2$survey2 <- rsurvey
mean(dataset2$survey2, na.rm = T) 
출력값 : 3.358566 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 기하학적 기법 시각화 - ggplot2 패키지  (0) 2020.07.07
[R] lattice 패키지  (0) 2020.07.06
[R] 이상치(극단치)  (0) 2020.07.06
[R] 결측치(NA) 처리  (0) 2020.07.06
[R] 데이터 셋 보기  (0) 2020.07.06

 이상치(극단치)

이상치(Outlier)란 관측된 데이터의 범위에서 많이 벗어나 아주 작은 값이나 아주 큰 값을 말합니다.

 

- 이상치의 유무는 데이터 분석에서 중요하게 작용하기 때문에 데이터 전처리에서 이상치를 찾는 것은 중요한 작업 중      하나입니다.

 

- 보통 이상치는 제거하는 것이 일반적이지만 분석 목적에 따라 이상치만 따로 모아서 케이스 분석을 실시하는 경우도      있습니다.

 

- 이상치 찾는 방법은 일반적으로 데이터 분포도를 이용하지만 분석분야(특히, 공장 및 제조)에 따라 관리범위로 찾는

  경우도 많이 존재합니다.

 

 

* 밑의 데이터를 활용하여 설명하겠습니다.

 

1) 범주형 변수 극다치 처리 - 이산변수 (정수형 변수)

 

table(dataset$gender)

- 출력값 - 
0   1   2   5  (요인-범주) / 1,2 = 여자, 남자 / 0,5 = 이상치 결과
2  173 124  1  (빈도수)

dataset <-subset(dataset, gender==1 | gender==2) # 1,2 외의 값 필터링 

length(dataset$gender) 
출력값 :  [1] 297

pie(table(dataset$gender))

subset( ) : 조건에 맞는 데이터 선택 시, 유용

                               ↓

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2) 연속형 변수의 이상치 처리 

 

① 데이터 확인

1. dataset$price 

2. plot(dataset$price) # plot 차트 

summary(dataset$price)

- 출력값 -
   Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
-457.200    4.425    5.400    8.752    6.300  675.000       30 

1. dataset$price

 

2. plot

 

② price 변수의 데이터 정제와 시각화

dataset2 <- subset(dataset, price >=2 & price <= 8)

length(dataset2$price) 
출력값 : [1] 251 - 이상치 49개 

stem(dataset2$price) # 줄기와 잎 도표 보기 (n.n)

의미 : 2~8 사이의 값이 출력 (각 숫자별로 2개씩 / 2 - 2.1, 2.3 ,2.3) 

'빅데이터 > R' 카테고리의 다른 글

[R] lattice 패키지  (0) 2020.07.06
[R] 코딩 변경  (0) 2020.07.06
[R] 결측치(NA) 처리  (0) 2020.07.06
[R] 데이터 셋 보기  (0) 2020.07.06
[R] reshape2 패키지  (0) 2020.07.03

분석을 위한 데이터셋을 확보했다 하더라도 바로 분석을 할 수 없는 경우가 많습니다. 그 이유는 바로 결측값, 이상치, 오입력 등이 있습니다. 따라서 데이터 분석에 적합하도록 데이터셋을 정제해야 합니다.

바로 이것을 전처리(data preprocessing)라고 합니다. 

 

결측값(missing value)

결측값은 입력이 누락된 값을 의미합니다. 보통 NA로 출력됩니다. 결측값이 포함되면 산술 연산에 문제가 생깁니다. 대부분의 산술 연산 함수는 결측값을 제외할 수 있는 옵션을 제공합니다. 

 

 

밑의 데이터를 토대로 설명하겠습니다 .

 

 

1) 결측치 확인

summary(dataset$price)

- 출력값 -
   Min    1st Qu.    Median    Mean    3rd Qu.  Max.       NA's 
-457.200    4.425    5.400    8.752    6.300  675.000       30 

sum(dataset$price) 
# NA가 하나라도 담겨 있으면 결과값으로 [1] NA 를 반환한다. 

summary() : 다양한 결과 값 출력

 

 

2) 결측치 제거

 

① sum() 함수에서 제공되는 속성 이용

sum(dataset$price, na.rm = T) 
출력값 : [1] 2362.9

na.rm = T : NA값 제외

 

 

② 결측데이터 제거 함수 이용

price2 <- na.omit(dataset$price) 

sum(price2)
출력값 : [1] 2362.9

length(price2) 
출력값 : [1] 270

na.omit() : NA가 들어 있는 항복 삭제

-  NA 항목을 다 삭제 하기 때문에 NA가 담겨있는 같은 행의 다른 항목들의 데이터들도 삭제 될 수 있는 위험이 존재.
-  데이터가 적을수록 분석결과가 신뢰도가 예측도가 떨어짐. 

 

 

 

3) 결측치 대체 

- 결측치를 0으로 대체하기  

x <- dataset$price # price vector 생성

head(x)  
출력값 : [1] 5.1 4.2 4.7 3.5 5.0 5.4

dataset$price2 <- ifelse(is.na(x),0,x)
ifelse(!is.na(x),x,0)

sum(dataset$price3) 
출력값 : [1] 2625.4

 

dataset$price2 <- ifelse(isx.na(x),0,x) : true 일 때 0, false 일 때 x로 출력.  / $를 붙이고 컬럼 이름을 넣으면 추가 

 

NA -> 0 출력

 

 

4) 결측치를 평균으로 대체하기 

dataset$price3 <- ifelse(is.na(x),round(mean(x, na.rm = T),2),x) 

mean(dataset$price3)
출력값 : [1] 8.751333

sum(dataset$price3)  
출력값 : [1] 2625.4

is.na(x),round(mean(x,na.rm = T) , 2) ,x) : true 일 때 평균 : round(mean(x,na.rm = T) , 2) / false 일때 x로 출력. 

 

* $를 붙이고 컬럼 이름을 넣으면 추가 

 

- 넣어준 평균 안에 이상치가 존재할 수 있기 때문에 결과의 값의 오류가 생길 수 있습니다. 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 코딩 변경  (0) 2020.07.06
[R] 이상치(극단치)  (0) 2020.07.06
[R] 데이터 셋 보기  (0) 2020.07.06
[R] reshape2 패키지  (0) 2020.07.03
[R] 파이프 연산자(pipe)  (0) 2020.07.03

위 데이터를 활용하여서 설명하도록 하겠습니다. 

 

 

 

1) 데이터 조회 

- 탐색적 데이터 분석을 위한 데이터 조회 

 

 

① 전체 데이터 보기

1. print(dataset) # 콘솔창 출력
2. View(dataset) # utils pakage, 뷰어창 출력

1. print()

 

2. View()

 

② 데이터의 앞부분과 뒷부분 보기 

head(dataset)

			- 출력값 -
      resident gender job age position price survey
1        1      1   1  26        2   5.1      1
2        2      1   2  54        5   4.2      2
3       NA      1   2  41        4   4.7      4
4        4      2  NA  45        4   3.5      2
5        5      1   3  62        5   5.0      1
6        3      1   2  57       NA   5.4      2


tail(dataset)

			- 출력값 -
      resident gender job age position price survey
295        2      1   1  20        1   3.5      5
296        1      5   2  26        1   7.1      2
297        3      1   3  24        1   6.1      2
298        4      1   3  59        5   5.5      2
299        3      0   1  45        4   5.1      2
300        1      1   3  27        2   4.4      2

head() : 앞으로 부터 6개 출력

tail() : 뒤로 부터 6개 출력 

 

 

 

 

2) 데이터 셋 구조 보기 

 

names(dataset)
출력값 : [1] "resident" "gender"   "job"      "age"      "position" "price"    "survey"  

attributes(dataset)

 

attributes()

str()

names() : 변수명(컬럼) 출력

attributes() : names(컬럼명), class(데이터 구조) , row.names(행의 이름 - 이름이 없으면 숫자 default 값 출력) 

str() : 데이터 구조 보기 (자료구조/관측치(행),컬럼(열)/자료형)

 

 

 

 

3) 데이터 셋 조회

 

 

① 데이터 셋 접근 방법

1. dataset$age 

2. dataset$resident

3. length(dataset) 
출력값: [1] 7

4. length(dataset$age) 
출력값: [1] 300

<변수의 '$' 를 연결하여 컬럼의 데이터를 가져올 수 있습니다.>

 

1. dataset$age

 

2. dataset$resident

 

3. length(변수) :   컬럼의 개수  - 자료 구조에 따라서 정도의 inform 이 다릅니다. 

 

4. length(변수$컬럼) : 행(데아터)의 갯수 - 변수의 이름을 넣어주면 전체 데이터 개수를 알려줍니다. 

 

 

["컬럼명'] 형식으로 특정 변수 조회 

head(dataset["gender"]) # = head(dataset$gender)

 - 출력값 - 
> head(dataset["gender"])
  gender
1      1
2      1
3      1
4      2
5      1
6      1


head(dataset["price"])

 - 출력값 - 
> head(dataset["price"])
  price
1   5.1
2   4.2
3   4.7
4   3.5
5   5.0
6   5.4

 

 

[색인(index)] 형식으로 변수 조회 

 

head(dataset[6]) # 6행의 데이터 전체 중 상위 6개 출력 

- 출력값 -
  price
1   5.1
2   4.2
3   4.7
4   3.5
5   5.0
6   5.4


dataset[3,] # 3행의 데이터 전체 

출력값 : 
resident gender job age position price survey
  NA       1     2  41      4     4.7     4
    
    
head(dataset[,3])
출력값 : [1]  1  2  2 NA  3  2


head(dataset[,c(2:4)]) # 2~4 열 출력 (상위 6개)
 
 - 출력값 -
 gender job age
1      1   1  26
2      1   2  54
3      1   2  41
4      2  NA  45
5      1   3  62
6      1   2  57


dataset[c(2:4),] # 2~4  행 출력

    - 출력값 -
  resident gender job age position price survey
2        2      1   2  54        5   4.2      2
3       NA      1   2  41        4   4.7      4
4        4      2  NA  45        4   3.5      2


head(dataset[-c(1:100),])  # 1~100핵 제외, 101~300행까지 출력 (상위6개)

	 - 출력값 -
   resident gender job age position price survey
101        1      2   3  NA        3   6.3      4
102        2      1   3  63        5    NA      2
103        1      1  NA  47        4   7.1      2
104        5      2   3  45        4   5.0      2
105        1      2   1  44        4   6.5      2
106        5      1   3  NA        5    NA      3

 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 이상치(극단치)  (0) 2020.07.06
[R] 결측치(NA) 처리  (0) 2020.07.06
[R] reshape2 패키지  (0) 2020.07.03
[R] 파이프 연산자(pipe)  (0) 2020.07.03
[R] dplyr 패키지  (2) 2020.07.03

reshape2 패키지

: 옆으로 컬럼이 많은 형태 ( Wide )를 세로로 긴 (Long) 형탤 변경해주고 반대로 세로로 긴 형태를 옆으로 넓게 바꿔주는 패키지입니다.

 

 

 

- 패키지 다운로드 

install.packages("reshape2")
library(reshape2)

 

 

위의 데이터를 활용하여 reshape2를 알아보겠습니다

 

 

① 예제

긴 형식 -> 넓은 형식으로 변경

 

dcast 함수를 이용한 넓은 형식 데이터 출력. 

wide <- dcast(data, Customer_ID ~ Date, sum)

 

① - 1 예제 

컬럼 이름 넣기 

colnames(wide) <- c('id','day1','day2','day3','day4','day5','day6','day7')
wide

 

 

 

② - 1예제 

넓은 형식을 긴 형식으로 변경

 

melt() 함수 이용 긴 형식으로 데이터 출력 

long <- melt(wide, id = 'id')
long

 

② - 2 예제 

컬럼명 수정

colnames(long) <- c("id", "Date", "Buy")
head(long)

 

 

 

 

 

- 3차원 배열 형식으로 변경 

 

airquality의 데이터를 활용하여 예제를 이어가보겟습니다. 

 

 <airquality>
데이터 셋은 R 에서 기본으로 제공되는 데이터 셋으로 New York의 대기에 대한 질을 측정한 데이터 셋이다 전체 153개의 관측치와 6 개의 변수로 구성되어 있으며 변수명은 모두 대문자로 되어있습니다. 


주요변수
Ozone(오존 수치), Solar.R(태양광) Wind(바람) Temp(온도)
Month(측정 월 5~9), Day(측정 날짜 1~31 일)

 

① 예제 

- 월과 일 컬럼으로 나머지 4개 컬럼을 묶어서 긴 형식 변경

 

acast 함수를 이용하여 3차원 배열 형식으로 데이터 출력 

air_melt <- melt(airquality, id = c("MONTH", "DAY"), na.rm = T)
head(air_melt)



        - 출력값 - 
  MONTH DAY variable value
    5    1    OZONE    41
    5    2    OZONE    36
    5    3    OZONE    12
    5    4    OZONE    18
    5    6    OZONE    28
    5    7    OZONE    23

 

② 예제 

월 단위 variable(대기과련 컬럼) 컬럼 합계

acast(air_melt, month~variable,sum)

          - 출력값 - 
   OZONE SOLAR.R  WIND TEMP
    614   4895   360.3 2032
    265   5705   308.0 2373
   1537   6711   277.2 2601
   1559   4812   272.6 2603
    912   5023   305.4 2307

'빅데이터 > R' 카테고리의 다른 글

[R] 결측치(NA) 처리  (0) 2020.07.06
[R] 데이터 셋 보기  (0) 2020.07.06
[R] 파이프 연산자(pipe)  (0) 2020.07.03
[R] dplyr 패키지  (2) 2020.07.03
[R] plyr 패키지  (0) 2020.07.02

파이프 연산자(pipe) 

:  파이프 연산자는 이름 그대로 어떤 값들이 파이프를 통과하는 것처럼 함수와 함수들을 타고다닐 수 있게 해줍니다.

%>% : 파이프(pipe) 연산자 - (단축키 : ctrl, shift , m )

 

위의 데이터를 활용하여서 설명하겠습니다. 

 

① 예제 

- filter()

exam %>% filter(class == 1) # 객체를 통해서 접근하기 때문에 변수를 명시하지 않아도 됩니다.  

		- 출력값 - 
  id class math english science
  1     1   50      98      50
  2     1   60      97      60
  3     1   45      86      78
  4     1   30      98      58
  

 

② 예제

- select()

 exam %>% select(class, math, english)
 
      - 출력값 - 
      
   class math english
     1   50      98
     1   60      97
     1   45      86
     1   30      98
     2   25      80
     2   50      89
     2   80      90
     2   90      78
     3   20      98
     3   50      98
     3   65      65
     3   45      85
     4   46      98
     4   48      87
     4   75      56
     4   58      98
     5   65      68
     5   80      78
     5   89      68
     5   78      83

 

③ 예제 

- filter() + select() 

 class가 1인 행만 추출한 다음 enlish 추출
 
exam %>% filter(class==1) %>%  select(english)


   - 출력값 - 
    english
1      98
2      97
3      86
4      98

 

④ 예제

- 과목별 총점과 총점 기준 정렬해서 상위 6개 데이터만 출력

exam  %>%  
  mutate(total = math + english + science) %>% 
  arrange(desc(total)) %>% 
  head

                - 출력값 - 
   id  class math english science total
   18     5   80      78      90   248
   19     5   89      68      87   244
    6     2   50      89      98   237
   17     5   65      68      98   231
   16     4   58      98      65   221
   20     5   78      83      58   219

 

 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 데이터 셋 보기  (0) 2020.07.06
[R] reshape2 패키지  (0) 2020.07.03
[R] dplyr 패키지  (2) 2020.07.03
[R] plyr 패키지  (0) 2020.07.02
[R] 연속변수(Continuous quantitative data) 시각화  (0) 2020.07.02

 dplyr 패키지 활용

 

: 데이터를 분석에 필요한 형태로 만드는 데이터 전처리 관련 함수 제공 패키지

 

- plyr의 뼈대를 가지고 와서 추가적인 함수를 넣었으므로 그대로 적용한 개념은 아닙니다. 
- 기존 plyr 패키지는 R 언어로 개발되었으나, dplyr 패키지는 C++ 언어로 개발되어 처리 속도를 개선하였습니다. 

 

 

 

hflights 함수를 활용하여 설명하도록 하겠습니다. 

 

<hflights>

2011년도 미국 휴스턴에서 출발하는 모든 비행기의 이착륙 기록이 수록된 것으로 227,496건의 이착륙 기록에대해 21개 항목을 수집한 데이터입니다. 

 

 

① 예제 

콘솔 창의 크기에 맞게 데이터 추출

 

-  tbl_df() : 콘솔 창 안에서 한 눈으로 파악하기 - 데이터셋 화면창 크기 만큼 데이터 제공

hflights_df<-tbl_df(hflights) 

hflights_df

 

 

 

 

② - 1 예제

조건에 맞는 데이터 필터링 

 

 filter(dataframe, 조건1, 조건2) 함수 이용 데이터 추출

- hflights_df를 대상으로 1월2일 데이터 추출하기  

filter(hflights_df, Month == 1 &  DayofMonth == 2) 
#and(, or &) - Source: local data frame [678 x 21]

 

② - 2 예제 

1월 혹은 2월 데이터 추출

filter(hflights_df, Month == 1 | Month == 2) 
# or(|) -  Source: local data frame [36,038 x 21]

 

② - 3 예제 

1월 2일의 비행 시간 

filter(hflights_df, Month == 1, DayofMonth == 2, AirTime >=300)
#  Source: local data frame [6 x 21]

 

 

 

③ - 1 예제 

컬럼으로 데이터 정렬

 

arrange() 함수를 이용한 오름차순 / 내림차순 정렬

년, 월, 출발시간, 도착시간 순으로 오름차순 정렬

arrange(hflights_df, Year, Month, DepTime, ArrTime) 
 

오름차순은 넣어준 순서로 정렬해서 출력합니다. 

 

 

③ - 2 예제 

도착시간 내림차순 정렬

arrange(hflights_df, Year, Month, desc(DepTime), ArrTime)

 

 

 

④ - 1 예제

특정 컬럼의 데이터 읽어오기

 

select 함수 이용한 데이터 추출

hflights_df에서 년, 월, 출발시간, 도착 시간 컬럼 검색하기

select(hflights_df, Year, Month, DepTime, ArrTime) # 4개의 컬럼 선택

 

④ - 2 예제 

컬럼의 범위 지정

Year ~ ArrTime 까지의 모든 컬럼이 지정

select(hflights_df, Year:ArrTime) 

 

④ - 3예제 

컬럼의 범위 제외

Year 부터 DayOfWeek 제외
 
select(hflights_df, -(Year:DayOfWeek))

 

 

 

⑤ 예제 

데이터 셋 컬럼 추가 

 

mutate() 함수를 이용하여 열 추가(변형)

출발 지연 시간(DepDelay)과 도착 지연 시간(ArrDelay)과의 차이를 계산하는 컬럼 추가하기

mutate(hflights_df, gain  = ArrDelay - DepDelay, gain_per_hour= gain/(AirTime/60))

 

 

 

⑥ - 1 예제 

요약 통계치 계산 

 

summarise() 함수를 이용한 데이터 요약 출력

비행시간 평균 계산하기 

summarise(hflights_df, avgAirTime = mean(AirTime, na.rm = T))  # NA 항목을 제외하고 계산 


avgAirTime

-출력값-
 <dbl>
  108. -  평균 운행 시간. 

 

⑥ - 2  예제 

데이터 셋의 관측치 길이. 출발 지연 시간 평균 구하기 

summarise(hflights_df, cnt = n(), delay=mean(DepDelay, na.rm = T)) 

- 출력값 - 
 cnt delay
<int> <dbl>
227496  9.44

- n() 개수를 출력줍니다.  
- n(), sum(), mean(), sd(), var(), median() 등의 함수 사용-기초 통계량

 

⑥ - 3  예제 

도착시간(ArrTime) 의 표준편차와 분산 계산하기

summarise(hflights_df, arrTimeSd=sd(ArrTime, na.rm = T), arriTimeVar = var(ArrTime, na.rm = T))  

- 출력값- 
 arrTimeSd arriTimeVar
 <dbl>       <dbl>
  472.     223163.

 state 패키지 안에 분석과 관련된 함수를 담고 있습니다. 

 

 

 

⑦ 예제 

집단변수를 이용하여 그룹화하기

 

group_by(dataframe, 기준변수) 함수를 이용한 그룹화 - 데이터 프레임을 대상으로 기준 변수 로그룹화

planes <- group_by(hflights_df, TailNum) # TailNum : 항공기 일련번호

delay <- summarise(planes, count = n(), dist = mean(Distance, na.rm = T), 
                           delay = mean (ArrDelay, na.rm = T))
delay <- filter(delay, count > 20 , dist < 2000)

install.packages("UsingR")
library(ggplot2) # ggplot2 : 고급 시각화(다양성) 기능
ggplot(delay,aes(dist,delay)) + geom_point(aes(size=count), alpha=1/2) + 
                                geom_smooth() + scale_size_area()

'빅데이터 > R' 카테고리의 다른 글

[R] reshape2 패키지  (0) 2020.07.03
[R] 파이프 연산자(pipe)  (0) 2020.07.03
[R] plyr 패키지  (0) 2020.07.02
[R] 연속변수(Continuous quantitative data) 시각화  (0) 2020.07.02
[R] 이산변수 시각화  (0) 2020.07.01

plyr 패키지 

: 두개 이상의 데이터프레임을 대상으로 key 값을 이용하여 하나의 패키지로 병합(merge) 하거나,
집단 변수를 기준으로 데이터 프레임의 변수에 함수를 적용하여 요약집계 결과를 제공하는 패키지입니다.

 

 

 

1)  join 의 기능

 

① 데이터 병합

x <- data.frame(id = c(1,2,3,4,5), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

x;y
- 출력값 -
 id height
  1    160
  2    171
  3    173
  4    162
  5    165
 
 id weight
  5     55
  4     73
  1     60
  3     57
  2     80

z <- join(x,y, by = 'id') # by = 'id' 공통인 id를 기준으로 데이터 병합 
z
 - 출력값 - 
 id height weight
  1    160     60
  2    171     80
  3    173     57
  4    162     73
  5    165     55

- 순서가 다르게 저장되어 있어도 정렬하여 출력합니다.

 

# merge와 join 같은 결과값을 낸다

a <- merge(x,y,by= 'id') # by = 'id' 공통인 id를 기준으로 데이터 병합 
a
- 출력값 - 
 id height weight
  1    160     60
  2    171     80
  3    173     57
  4    162     73
  5    165     55

 

merge와 같은 기능을 가지고 있는데 왜 join을 사용할까요?

그 이유는 추가적인 기능을 많이 가지고 있기 때문입니다. 그 기능을 조금 더 알아보겠습니다.

 

 

② 왼쪽(left) 조인하기 

-  x, y 의 데이터에서 6과 5 다른 값으로 저장 되어 있는 상황

x <- data.frame(id = c(1,2,3,4,6), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

left <-join( x , y , by = 'id')

left
    - 출력값 -
  id height weight
  1    160     60
  2    171     80
  3    173     57
  4    162     73
  6    165     NA

 - by = 'id' 공통인 id를 기준으로 데이터 병합합니다.
 - 왼쪽 조인 방법이 default 값으로, 왼쪽 변수를 기준으로 하여 삽입 되어 있는 값이 없으면 NA(결측치)를 반환합니다.
   (왼쪽변수 기준 : NA(결측치;누락된 값, 비어있는 값))

 

 

② 내부(inner) 조인 

x <- data.frame(id = c(1,2,3,4,6), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

inner <-join( x , y , by = 'id' , type = 'inner') 
                                               

inner
 - 출력값 -
id height weight
1    160     60
2    171     80
3    173     57
4    162     73

type='inner' : 값이 있는 것만 조인합니다. - default 값을 변경 하고 싶을 때 type 사용

 

 

③ 전체(full) 조인하기 

x <- data.frame(id = c(1,2,3,4,6), height = c(160,171,173,162,165))
y <- data.frame(id = c(5,4,1,3,2), weight = c(55,73,60,57,80))

full <-join( x , y , by = 'id' , type = 'full')

full
- 출력값 -
id  height  weight
1    160     60
2    171     80
3    173     57
4    162     73
6    165     NA
5     NA     55

type ='full' : 모든 항목 조인합니다.

 

- id의 순서는 먼저 오는 데이터 순으로 입력 됩니다.

 

 

④ key 값으로 병합하기

x <- data.frame(key1 = c(1,1,2,2,3) , 
                key2 = c('a', 'b' , 'c' , 'd', 'e'), val1 = c(10,20,30,40,50)) 
y <- data.frame(key1 = c(3,2,2,1,1) ,
                key2 = c('e', 'd' , 'c' , 'b', 'a'), val1 = c(500,400,300,200,100)) 

xy <- join(x,y,by=c('key1','key2'))
xy 
       - 출력값 - 
   key1 key2 val1 val1
    1    a   10  100
    1    b   20  200
    2    c   30  300
    2    d   40  400
    3    e   50  500

 

 

 

 tapply()

: 이용한 집단별(그룹별) 통계치 구하기(활용도높음)

 

iris 데이터 셋을 대상을 tupply() 함수 적용해보겠습니다.

 

< iris >

R에서 제공되는 기본 데이터 셋으로 3가지 꽃의 종류별 50 개씩 전체 150개의 관측치로 구성됩니다. iris는 붓꽃에 관한 데이터 5개의 변수로 제공하며, 각 변수의 내용은 다음과 같습니다.

Sepal.Length(꽃받침 길이) , Sepal.Width(꽃받침 너비), Petal.Length(꽃잎 길이),

Petal.Width(꽃잎 너비), Species(꽃의 종류) : 3가지 종류별 50개 (전체 150개 관측치)

 

tapply(iris$Sepal.Length, iris$Species, mean) # 평균

 - 출력값 - 
setosa versicolor  virginica 
5.006      5.936      6.588 

tapply(iris$Sepal.Length, iris$Species, sd # 표준편차(sd)

 - 출력값 - 
  setosa    versicolor  virginica 
 0.3524897  0.5161711  0.6358796 

데이터 셋 <꽃받침의 길이>, 그룹핑할 데이터 셋 <종(3가지를 그룹핑을 함)>, 기능(함수)

 

 

ddply()

: 집단 변수 대상 통계치 구하기

형식) ddply(dataframe, .(집단변수), 요약집계, 컬럼명=함수(변수))

설명) dataframe의 집단변수를 기준으로 변수에 함수를 적용하여 컬럼명으로 표현합니다.

 

-  tapply 와 차이점 추가적으로 여러개의 값을 출력할 수 있습니다.

 

avg_df <- ddply(iris, .(Species), summarise, avg = mean(Sepal.Length))

avg_df
     - 출력값 - 
   Species    avg
    setosa  5.006
 versicolor 5.936
  virginica 6.588

# 꽃의 종(Species)으로 여러 개의 함수 적용하기  
val <- ddply(iris, .(Species), summarise, avg = mean(Sepal.Length), 
                                          std =sd(Sepal.Length), 
                                          max = max(Sepal.Length),
                                          min = min(Sepal.Length))

val
                - 출력값 - 
    Species   avg      std   max min
     setosa 5.006 0.3524897 5.8 4.3
 versicolor 5.936 0.5161711 7.0 4.9
  virginica 6.588 0.6358796 7.9 4.9


# 결과값의 단위가 다르므로 같도로 처리. 
round <- ddply(iris, .(Species), summarise, avg = round(mean(Sepal.Length),2), 
                                            std = round(sd(Sepal.Length),2), 
                                            max = round(max(Sepal.Length),2),
                                            min = round(min(Sepal.Length),2))

round # 소수점 둘째 자리까지 출력. 

             - 출력값 - 
   Species  avg  std  max min
     setosa 5.01 0.35 5.8 4.3
 versicolor 5.94 0.52 7.0 4.9
  virginica 6.59 0.64 7.9 4.9

 round() :  반올림 처리하기 .

 

 

'빅데이터 > R' 카테고리의 다른 글

[R] 파이프 연산자(pipe)  (0) 2020.07.03
[R] dplyr 패키지  (2) 2020.07.03
[R] 연속변수(Continuous quantitative data) 시각화  (0) 2020.07.02
[R] 이산변수 시각화  (0) 2020.07.01
[R] 주요 내장 함수  (0) 2020.07.01

+ Recent posts