[R] 데이터 프레임을 특정 열 기준으로 정렬하기
데이터 프레임을 하나 정의합시다. A=c(5,4,7,6,2,1,3) B=c(1,2,3,4,5,6,7) df=data.frame(A,B) > df A B 1 5 1 2 4 2 3 7 3 4 6 4 5 2 5 6 1 6 7 3 7 A 열을 기준으로 정렬해보겠습니다. order 함수를 이용하여 A열의 행들의 크기 순서를 알아냅니다. > order(df$A) [1] 6 5 7 2 1 4 3 이 순서를 데이터프레임의 행 인덱싱에 사용하면 됩니다. > df[order(df$A),] A B 6 1 6 5 2 5 7 3 7 2 4 2 1 5 1 4 6 4 3 7 3
2022. 4. 2.
R 데이터프레임 쉽게 이해하기
사전지식 : R 벡터 데이터프레임은 여러개의 벡터를 이어놓은 것이라고 할 수 있습니다. 각 벡터가 데이터 프레임의 열이 됩니다. 예를 들어봅시다. 벡터를 세개 정의하겠습니다. > vec1=c(1,2,3,4,5) > vec2=c('a','b','c','d','e') > vec3=c(TRUE,TRUE,TRUE,FALSE,FALSE) 데이터 프레임으로 합쳐봅시다. 아래와 같이 data.frame 이라는 함수를 사용하고, 벡터를 콤마로 구분해주시면 됩니다. > df1=data.frame(vec1,vec2,vec3) > df1 vec1 vec2 vec3 1 1 a TRUE 2 2 b TRUE 3 3 c TRUE 4 4 d FALSE 5 5 e FALSE 벡터가 각 열에 들어간 것을 알 수 있습니다.
2021. 10. 18.
[R코딩] 행렬의 특잇값 분해 (svd)
행렬의 특잇값 분해는 아래와 같이 행렬 A를 U,D,V 세 행렬의 곱으로 나타내는 것입니다. (보통 D 대신 Σ 를 사용하는데, R 함수에서는 D를 사용합니다.) $A=UDV^{T}$ 특잇값 분해는 영어로 singular value decomposition 입니다. 줄어서 SVD 라고 부릅니다. R 함수 이름도 svd 입니다. singular value 를 한글로 옮긴 것이 '특잇값' 입니다. A,U,D,V 에 대한 설명은 아래와 같습니다. A : NxM 크기의 행렬 U : N차원 정방 직교 행렬 D : 대각행렬 V : M차원 정방 직교 행렬 아래는 R 예시입니다. > A=matrix(1:6,2) > A [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > svd(A) $d [1] 9.5..
2020. 12. 22.
[R코딩] 행렬을 열 방향으로 연결 (cbind)
R행서 행렬을 열 방향(좌->우)으로 연결할 때는 cbind함수를 사용합니다. 두 행렬이 열방향으로 연결되려면 두 행렬의 행의 크기가 같아야합니다. 두 행렬을 정의해봅시다. > m1=matrix(1:6,2) > m1 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > m2=matrix(1:4,2) > m2 [,1] [,2] [1,] 1 3 [2,] 2 4 cbind 함수를 이용하여 연결해봅시다. > cbind(m1,m2) [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 1 3 [2,] 2 4 6 2 4
2020. 12. 21.
[R코딩] 행렬을 행 방향으로 연결 (rbind)
두 행렬을 행 방향(위->아래)으로 연결할 때는 rbind 함수를 사용합니다. 두 행렬을 정의해봅시다. 행 방향으로 연결하려면 두 행렬의 열의 크기가 같아야 합니다. > m1=matrix(1:6,2) > m1 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > m2=matrix(1:9,3) > m2 [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 rbind 함수를 이용하여 연결해봅시다. > rbind(m1,m2) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 [3,] 1 4 7 [4,] 2 5 8 [5,] 3 6 9
2020. 12. 21.
[R코딩] 행렬의 곱 (%*%)
R에서 행렬의 곱을 수행하는 함수는 %*% 입니다. 행렬을 하나 정의합시다. > m1=matrix(1:4,2) > m1 [,1] [,2] [1,] 1 3 [2,] 2 4 m1과 m1을 곱하는 행렬의 곱을 해봅시다. > m1%*%m1 [,1] [,2] [1,] 7 15 [2,] 10 22 행렬과 행렬을 곱할 때는, 앞 행렬의 열의 수와 뒤 행렬의 행의 수가 같아야 합니다. 두 행렬을 정의합시다. m2 는 2행3열, m3는 3행3열의 행렬입니다. > m2=matrix(1:6,2) > m2 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > m3=matrix(1:9,3) > m3 [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 m2의 열의 수와 m3의 행..
2020. 12. 21.
[R기초] 대각행렬을 생성하는 diag 함수
대각행렬은 대각선 방향을 제외한 나머지 값이 0인 행렬입니다. R에서는 diag 함수를 이용하여 생성합니다. diag(값,행의수,열의수) 예를들면 아래와 같습니다. > diag(1,4,4) [,1] [,2] [,3] [,4] [1,] 1 0 0 0 [2,] 0 1 0 0 [3,] 0 0 1 0 [4,] 0 0 0 1
2020. 12. 20.
[R 코딩] 역행렬 구하는 함수 (solve)
R에서 역행렬을 구할 때는 solve 함수를 사용합니다. 행렬을 하나 정의합시다. > m=matrix(1:4,2) > m [,1] [,2] [1,] 1 3 [2,] 2 4 역행렬을 구해봅시다. > m_inv=solve(m) > m_inv [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5 역행렬이 맞는지 확인합시다. 둘을 곱하여 단위행렬이 나오면 됩니다. > m_inv=solve(m) > m_inv [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5
2020. 12. 18.
[R 코딩] 모든 원소가 0인 행렬 만들기
파이썬 넘파이나 매트랩의 zeros 와 같은 역할입니다. R에서 행렬을 정의할 때, 벡터가 들어가는 자리에 0을 넣으면 됩니다. 3행 5열의 zeros 행렬을 만들어봅시다. > matrix(0,3,5) [,1] [,2] [,3] [,4] [,5] [1,] 0 0 0 0 0 [2,] 0 0 0 0 0 [3,] 0 0 0 0 0
2020. 12. 18.
[R코딩] 리스트 인덱싱 할때, 요소 자체의 자료형으로 출력
리스트를 인덱싱할 때, 요소를 리스트 형태로 출력할 수도 있고 요소 자체의 자료형으로 출력할 수도 있습니다. 먼저 리스트를 하나 정의합시다. > li=list(v=c(1,2,3),m=matrix(1:4,2),df=data.frame(a=c(1,2,3),b=c(4,5,6))) > li $v [1] 1 2 3 $m [,1] [,2] [1,] 1 3 [2,] 2 4 $df a b 1 1 4 2 2 5 3 3 6 리스트 형태로 인덱싱 대괄호를 한겹만 사용합니다. > li[1] $v [1] 1 2 3 > li[2] $m [,1] [,2] [1,] 1 3 [2,] 2 4 > li[3] $df a b 1 1 4 2 2 5 3 3 6 자료형을 확인해봅시다. > class(li[1]) [1] "list" > class(..
2020. 12. 16.
[R 코딩] 리스트를 데이터프레임으로 만드는 stack 함수
stack 함수를 이용하면 리스트를 데이터프레임으로 만들 수 있습니다. 왜 리스트를 데이터프레임으로 바꾸는지, 어떻게 바뀌는지는 예제를 통해 이해할 수 있을것입니다. 단, 벡터나 factor가 들어있는 리스트만 가능합니다. 예를들어 한국,미국,영국 세 나라에서 다섯사람씩 모였고 이들의 나이를 리스트레 저장했다고 합시다. > li=list(kor=c(23,42,66,36,72),us=c(11,16,25,66,73),uk=c(16,5,34,25,12)) > li $kor [1] 23 42 66 36 72 $us [1] 11 16 25 66 73 $uk [1] 16 5 34 25 12 위 리스트에 stack 함수를 적용한 결과는 아래와 같습니다. > stack(li) values ind 1 23 kor 2 4..
2020. 12. 16.
[R 코딩] list 를 벡터로 만들기 (unlist 함수)
벡터, 행렬, 데이터프레임을 하나씩 정의하여 list에 넣어봅시다. > v=c(1,2,3) > m=matrix(1:4,2) > df=data.frame(a=c(10,20,30),b=c(40,50,60)) 리스트에 넣은 결과입니다. > ml=list(v,m,df) > ml [[1]] [1] 1 2 3 [[2]] [,1] [,2] [1,] 1 3 [2,] 2 4 [[3]] a b 1 10 40 2 20 50 3 30 60 리스트에 unlist 함수를 적용해봅시다. > unlist(ml) a1 a2 a3 b1 b2 b3 1 2 3 1 2 3 4 10 20 30 40 50 60 벡터로 변한것을 알 수 있습니다.
2020. 12. 15.
[R 코딩] 벡터의 원소 반복 규칙
원소 반복규칙의 예시는 아래와 같습니다. > c(1,2,3)+c(1,2,3,4,5,6) [1] 2 4 6 5 7 9 길이가 다르지만 길이가 짧은 벡터가 반복되며 모자란 부분을 채웁니다. cbind 함수에도 적용됩니다. > cbind(1:2,1:5) [,1] [,2] [1,] 1 1 [2,] 2 2 [3,] 1 3 [4,] 2 4 [5,] 1 5 Warning message: In cbind(1:2, 1:5) : number of rows of result is not a multiple of vector length (arg 1)
2020. 12. 15.
[R 코딩] 벡터 중간에 데이터 삽입
벡터 중간에 데이터를 삽입할 때는 append 함수를 사용합니다. 아래와 같은 형식입니다. append(벡터,삽입할데이터,after=n) 아래와 같은 벡터가 있다고 합시다. v1=c(10,20,30,40,50) 이 벡터의 세번째와 네번째 원소 사이에 c(1,2,3)을 삽입해봅시다. > append(v1,c(1,2,3),after=3) [1] 10 20 30 1 2 3 40 50
2020. 12. 15.