R 프로그래밍

19. 하위집합 (목록, 행렬, 부분일치, 누락 값 제거)

작심반복하기 2025. 4. 24. 14:24

1. R객체에서 하위집합을 추출하는 오퍼레이터 

- 객체에서 다양한 요소 추출 

(항상 원본과 같은 클래스 객체를 반환) 

[[ - 리스트나 데이터 프레임 요소 추출/ 단일 요소만 추출 

(단, 반환 객체가 반드시 리스트나 데이터프레임일 필요는 없음

$ - 리스트나 데이터 프레임 요소를 문자명으로 추출

 

2.  하위집합 

2-1. 벡터 

x <-c("a", "b", "c", "c", "d", "a") 
x[1] 
[1] "a" 

x[1:5] 
[1] "a" "b" "c" "c" "d" 

x[c(1,3,4)] 
[1] "a" "c" "c" 

u <- x > "a" 
u 
[1] FALSE TRUE TRUE TRUE TRUE TRUE FALSE 
x[u] 
[1] "b" "c" "c" "d" 

x[x > "a"] 
[1] "b" "c" "c" "d"

2-2. 행렬 

x <- matrix(1:6, 2, 3) 
x 
     [,1] [,2] [,3] 
[1,]    1    3    5
[2,]    2    4    6 

x[1,2] 
[1] 3 

x[1, 2, drop=FALSE] #행렬차원 보존 
    [,1] 
[1,]   3

x[2,1] 
[1] 2 

x[1, ] 
[1] 1 3 5 
x[, 2] 
[1] 3 4

2-3. 리스트 

x<- list(foo= 1:4, bar=0.6) 
x 
$foo
[1] 1 2 3 4  #단일 대괄호는 항상 같은 클래스를 반환하므로 '리스트' 반환

$bar 
[1] 0.6 

x[[1]]
[1] 1 2 3 4 #시퀀스만 반환
x <-list(foo=1:4, bar=0.6, baz="hello")
name <-"foo" 

x[[name]]
[1] 1 2 3 4 

x$name
NULL  #x에서 name 단어를 가진 리스트 요소를 찾기 때문에, NULL 

x$foo 
[1] 1 2 3 4

$foo 
[1] 1 2 3 4

$baz 
[1] "hello"
x <-list(a=list(10,12,14), b=c(3.14,2.82)) 
x[[c(1,3)]] 
[1] 14 

x[[1]][[3]]
[1] 14 

x[[c(2,1)]] 
[1] 3.14

2-4. 부분일치 

x<- list(aardvark =1:5)
x$a 
[1] 1 2 3 4 5
x[["a"]] #목록에 정확히 있는 지 확인 
NULL 
x[["a", exact=FALSE]] 
[1] 1 2 3 4 5

2-5. 누락 값 제거 

x <-c(1, 2, NA, 4, NA, 5) 
bad <- is.na(x)
print(bad)  #bad 벡터 = 논리벡터 
[1] FALSE FALSE TRUE FALSE TRUE FALSE 
x[!bad]
[1] 1 2 4 5
x<- c(1,2,NA,4,NA,5) 
y<-c("a", "b", NA, "d", NA, "f") 
good <-complete.cases(x,y)  #x,y에서 완전한 값이 있는 지 알려주는 함수 
good 
[1] TRUE TRUE FALSE TRUE FALSE TRUE 
x[good] 
[1] 1 2 4 5
y[good] 
[1] "a" "b" "d" "f"

'R 프로그래밍' 카테고리의 다른 글

21. (R) 벡터  (0) 2025.05.23
20. (R) 수열  (0) 2025.05.22
18. 외부에서 파일 불러오기 (R)  (0) 2025.04.24
17. 텍스트 데이터 형식  (0) 2025.04.17
16. R - 표 형식 데이터 읽기  (0) 2025.04.14