R-Studio Subset과 IO의 사용.

R-Studio의 Subset을 통해 조건부 컬럼 출력.

Featured image

R-Studio 의 IO

데이터 입출력을 위한 IO
조건에 맞는 컬럼 출력을 위한 subset()함수 사용


파일 소스

우클릭 -> 다른이름으로 링크저장 이용해 주세요
abc.csv

함수 예제

abccsv <- read.csv("abc.csv", header = T)
abccsv
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80    NA    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 6      2   2  60        7   daegu    40     3  3000      1

# check 속성 도메인 원자값 출력
unique(abccsv$check)
# 5와 NA와 3 3가지 값이 존재.
# [1]  5 NA  3

# check 열의 값이 5인 행들
check5 <- subset(abccsv, abccsv$check == 5)
check5
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 3      1   2  30        4   daegu    60     5  2500      2

# check 열의 값이 3인 행들
check_not_3 <- subset(abccsv, abccsv$check != 3)
check_not_3
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 3      1   2  30        4   daegu    60     5  2500      2

# check 속성값이 na값인 행 출력
check_na <- subset(abccsv, is.na(abccsv$check))
check_na
#   gender job age position address total check price survey
# 2      1   2  20        5   busan    80    NA    NA     NA

# survey
check_na2 <- subset(abccsv, abccsv$survey==3 | abccsv$survey==1 | is.na(abccsv$survey))
check_na2
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80    NA    NA     NA
# 6      2   2  60        7   daegu    40     3  3000      1

# 오름차순
asc <- order(+abccsv$age)
asc
# [1] 1 2 3 4 5 6
abccsv[asc, ]
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80    NA    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 6      2   2  60        7   daegu    40     3  3000      1

# 내림차순
desc <- order(-abccsv$age)
desc
# [1] 6 5 4 3 2 1
abccsv[asc, ]
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80    NA    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 6      2   2  60        7   daegu    40     3  3000      1

# -가 들어가면 내림차순
abccsv[order(-abccsv$job, +abccsv$gender), ]
abccsv
#   gender job age position address total check price survey
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 2      1   2  20        5   busan    80    NA    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2
# 6      2   2  60        7   daegu    40     3  3000      1
# 1      1   1  10        2   seoul    50     5  1200      3

# check 속성값이 na 이면 3을 넣고 아니면 그대로 값을 유지
abccsv$check <- ifelse(is.na(abccsv$check), 3, abccsv$check)
abccsv

# price 속성값이 na 이면 na을 제외한 price속성의 평균을 na 속성값에 대입 한다.
abccsv$price <- ifelse(is.na(abccsv$price), mean(abccsv$price, na.rm = T), abccsv$price)
#   gender job age position address total check price survey
# 1      1   1  10        2   seoul    50     5  1200      3
# 2      1   2  20        5   busan    80     3    NA     NA
# 3      1   2  30        4   daegu    60     5  2500      2
# 4      1   3  40        4   busan    70     3  1200      5
# 5      2   3  50        5   seoul    50     3  1400      6
# 6      2   2  60        7   daegu    40     3  3000      1
str(abccsv)
# 'data.frame':	6 obs. of  9 variables:
# $ gender  : int  1 1 1 1 2 2
# $ job     : int  1 2 2 3 3 2
# $ age     : int  10 20 30 40 50 60
# $ position: int  2 5 4 4 5 7
# $ address : Factor w/ 3 levels "busan","daegu",..: 3 1 2 1 3 2
# $ total   : int  50 80 60 70 50 40
# $ check   : num  5 3 5 3 3 3
# $ price   : num  1200 1860 2500 1200 1400 3000
# $ survey  : int  3 NA 2 5 6 1

# survey의 디폴트 : 3
# 파일을 생성한다.
write.csv(abccsv, "abcCleanData.csv")