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에서 날짜,시간 데이터 인식하는 법 (strptime)
아래와 같은 데이터프레임이 있다고 합시다. date=c("2021-01-01 01:01:01","2021-01-02 02:01:01","2021-01-03 03:01:01","2021-01-04 04:01:01","2021-01-05 05:01:01") x=c(10,20,30,40,50) dt=data.frame(date,x) > dt date x 1 2021-01-01 01:01:01 10 2 2021-01-02 02:01:01 20 3 2021-01-03 03:01:01 30 4 2021-01-04 04:01:01 40 5 2021-01-05 05:01:01 50 > str(dt) 'data.frame':5 obs. of 2 variables: $ date: chr "2021-01-01 01:01:0..
2021. 9. 16.
R에서 역행렬,행렬식,전치행렬 구하는 방법
함수는 아래와 같습니다. 역행렬 solve( ) 행렬식 det( ) 전치행렬 t( ) 아래는 예시입니다. > A=matrix(c(1,3,4,2,5,1,4,2,3),nrow=3) > A [,1] [,2] [,3] [1,] 1 2 4 [2,] 3 5 2 [3,] 4 1 3 > t(A) [,1] [,2] [,3] [1,] 1 3 4 [2,] 2 5 1 [3,] 4 2 3 > solve(A) [,1] [,2] [,3] [1,] -0.22807018 0.03508772 0.28070175 [2,] 0.01754386 0.22807018 -0.17543860 [3,] 0.29824561 -0.12280702 0.01754386 > det(A) [1] -57
2021. 3. 30.
[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코딩] 한 벡터를 정렬 할 때, 그 순서로 다른 벡터 정렬하기
한 벡터를 크기 순으로 정렬할 때, 연관된 다른 벡터도 함께 정렬해야하는 경우 사용하는 방법입니다. 예를들어봅시다. X는 수학점수, Y는 사람이름이라고 합시다. X=c(62,82,95,51) Y=c("tim","marry","kate","bob") X를 내림차순으로 정렬할 때, Y도 X를 따라 정렬되게 하고 싶은 상황입니다. sort 함수에 index.return 옵션을 TRUE로 설정하면 아래 값이 반홥됩니다. > sx=sort(X,decreasing=TRUE,index.return=TRUE) > sx $x [1] 95 82 62 51 $ix [1] 3 2 1 4 ix는 기존의 index가 정렬 된 후 어느 위치에 오게되었는지를 알려줍니다. 이 index를 이용하여 두 함수를 정렬합시다. 우리가 의도한..
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기초] 교집합 함수 (intersect)
intersect 함수는 두 벡터를 집합으로 인식하여 교집합을 구해줍니다. 집합이기 때문에 중복되는 원소는 하나만 남겨집니다. > A=c(1,2,3,4,5,5) > B=c(1,1,2,4,4) > intersect(A,B) [1] 1 2 4
2020. 12. 20.
[R기초] 매칭된 원소를 찾는 match 함수
아래와 같은 두 벡터가 있습니다. A=c(20,40,100) B=c(10,20,30,40,50,60) A에 들어있는 원소가 B에 있는지 확인해봅시다. 20 -> B의 두번째 자리 40 -> B의 네번째 자리 100 -> B에 없음 위와 같은 연산을 하는 함수가 있습니다. match 함수입니다. 사용해봅시다. > A=c(20,40,100) > B=c(10,20,30,40,50,60) > match(A,B) [1] 2 4 NA
2020. 12. 20.