R에서 벡터의 조합 및 순열 만들기

Jesse John 2023년6월21일
  1. 이항 계수 및 조합
  2. 계승 및 순열
  3. 하나의 벡터 요소 조합
  4. 많은 벡터 요소의 조합
  5. 벡터 요소의 순열
  6. 고유하지 않은 요소 다루기
  7. 결론
R에서 벡터의 조합 및 순열 만들기

Base R은 이항 계수를 계산하고 순열의 수를 찾는 데 도움이 되는 함수를 제공합니다. 그러나 때때로 우리는 단지 숫자를 얻는 것이 아니라 모든 조합과 순열을 찾고 싶을 때가 있습니다.

이 기사에서는 조합 및 순열의 수를 구하는 방법과 모든 조합 및 순열을 구하는 방법에 대해 설명합니다. 또한 벡터에 중복 요소가 있을 때 어떤 일이 발생하는지에 대해서도 논의할 것입니다.

이러한 함수는 제한된 범위의 값에 대해서만 작동합니다.

이항 계수 및 조합

choose(n,k) 함수는 이항 계수를 계산합니다. 우리는 반복 없이 한 번에 k를 취한 n 고유 항목의 조합 수를 얻습니다.

예제 코드:

# 조합
# 20개 개체에서 2개 개체의 조합 계산
선택(20,2)

# 매우 큰 값에는 작동하지 않습니다.
고르다(1030,500)

출력:

> # Count combinations of 2 objects from 20 objects.
> choose(20,2)
[1] 190

> # It does not work for very large values.
> choose(1030,500)
[1] Inf

계승 및 순열

factorial(x) 함수는 반복 없이 x 고유 개체의 순열 수를 제공합니다. n개체 집합에서 k개체의 순열을 계산하기 위한 기본 R에는 특정 함수가 없지만 factorial(n)factorial(k)의 몫으로 계산할 수 있습니다.

예제 코드:

# 순열
# 17개의 고유 개체의 순열
계승(17)

# 큰 값에는 작동하지 않습니다.
계승(171)

# 19개의 개별 개체에서 5개 개체의 순열
계승(19)/계승(5)

출력:

> # Permutations of 17 distinct objects.
> factorial(17)
[1] 3.556874e+14

> # It does not work for large values.
> factorial(171)
[1] Inf

> # Permutations of 5 objects from 19 distinct objects.
> factorial(19)/factorial(5)
[1] 1.013709e+15

하나의 벡터 요소 조합

함수 combn(x,m)은 반복 없이 x 개별 개체에서 가져온 m 개체의 모든 조합을 나열합니다. 열은 서로 다른 조합입니다.

예제 코드:

# 객체 벡터
mv1 = c("테니스", "배드민턴", "축구", "육상", "체스")
mv1

# 두 요소의 모든 조합
빗(mv1,2)

# 세 가지 요소의 모든 조합
빗(mv1,3)

# 속성 확인
c3 = 빗(mv1,3)
등급(c3)
이름(c3)

출력:

> mv1
[1] "Tennis"    "Badminton" "Football"  "Athletics" "Chess"

> # All combinations of two elements.
> combn(mv1,2)
     [,1]        [,2]       [,3]        [,4]     [,5]        [,6]        [,7]        [,8]        [,9]
[1,] "Tennis"    "Tennis"   "Tennis"    "Tennis" "Badminton" "Badminton" "Badminton" "Football"  "Football"
[2,] "Badminton" "Football" "Athletics" "Chess"  "Football"  "Athletics" "Chess"     "Athletics" "Chess"
     [,10]
[1,] "Athletics"
[2,] "Chess"

> # Check its properties.
> c3 = combn(mv1,3)

> class(c3)
[1] "matrix" "array"

> names(c3)
NULL

출력은 배열입니다. 열 또는 행 이름이 없습니다.

많은 벡터 요소의 조합

expand.grid() 함수를 사용하면 주어진 벡터 요소의 모든 조합으로 데이터 프레임을 만들 수 있습니다. 이 함수는 여러 벡터를 입력으로 받을 수 있습니다.

다시 말하지만, 함수가 원하는 출력을 제공하려면 입력 벡터에 고유한 요소가 있어야 합니다.

예제 코드:

# 새로운 벡터 생성
mv2 = c("사과", "망고", "당근")
mv2

# expand.grid() 함수는 주어진 벡터 요소의 모든 조합을 나열합니다.
# 기존 벡터를 사용하거나 C()를 사용하여 벡터 생성
ex_df = expand.grid(스포츠 = mv1, 과일 = mv2, 색상 = c("파란색", "빨간색"))
ex_df

출력:

> mv2
[1] "Apple"  "Mango"  "Carrot"

> # The expand.grid() function lists all combinations of the elements of the given vectors.
> # Use existing vectors or create a vector using c().
> ex_df = expand.grid(Sport = mv1, Fruit = mv2, Color = c("Blue", "Red"))
> ex_df
       Sport  Fruit Color
1     Tennis  Apple  Blue
2  Badminton  Apple  Blue
3   Football  Apple  Blue
4  Athletics  Apple  Blue
5      Chess  Apple  Blue
6     Tennis  Mango  Blue
7  Badminton  Mango  Blue
8   Football  Mango  Blue
9  Athletics  Mango  Blue
10     Chess  Mango  Blue
11    Tennis Carrot  Blue
12 Badminton Carrot  Blue
13  Football Carrot  Blue
14 Athletics Carrot  Blue
15     Chess Carrot  Blue
16    Tennis  Apple   Red
17 Badminton  Apple   Red
18  Football  Apple   Red
19 Athletics  Apple   Red
20     Chess  Apple   Red
21    Tennis  Mango   Red
22 Badminton  Mango   Red
23  Football  Mango   Red
24 Athletics  Mango   Red
25     Chess  Mango   Red
26    Tennis Carrot   Red
27 Badminton Carrot   Red
28  Football Carrot   Red
29 Athletics Carrot   Red
30     Chess Carrot   Red

열이 벡터에 해당하고 행이 요소의 조합인 데이터 프레임을 얻습니다. 행 수는 각 벡터의 요소 수를 곱한 것입니다.

벡터 요소의 순열

combinat 패키지의 permn() 함수는 벡터의 모든 요소에 대한 순열을 생성합니다. 이 패키지를 설치해야 할 수도 있습니다.

예제 코드:

# Combinat 패키지를 사용할 수 없는 경우 설치
# 주석을 제거하고 다음 줄을 실행하여 설치
# install.packages("조합")

# Combinat 패키지 로드
라이브러리(조합)

# 벡터의 모든 순열 생성
파마(mv2)

출력:

> # Create all permutations of a vector.
> permn(mv2)
[[1]]
[1] "Apple"  "Mango"  "Carrot"

[[2]]
[1] "Apple"  "Carrot" "Mango"

[[3]]
[1] "Carrot" "Apple"  "Mango"

[[4]]
[1] "Carrot" "Mango"  "Apple"

[[5]]
[1] "Mango"  "Carrot" "Apple"

[[6]]
[1] "Mango"  "Apple"  "Carrot"

고유하지 않은 요소 다루기

벡터의 일부 요소가 동일하면 어떤 일이 발생하는지 봅시다. 세 함수의 출력을 모두 살펴보겠습니다.

예제 코드:

# Combn()의 예
# 일부 동일한 요소가 있는 벡터
mv3 = c("테니스", "테니스", "축구", "운동")
mv3
# 결과 조합
c2 = 빗(mv3,2)
c2

# expand.grid()의 예
mv4 = c("빨강", "파랑", "빨강")
예 = expand.grid(스포츠 = mv3, 색상 = mv4)
예를 들어

# Permn()의 예
pn = 영구(mv4)
pn

출력:

# Example for combn().
> mv3
[1] "Tennis"    "Tennis"    "Football"  "Athletics"
> # Resulting combinations.
> c2 = combn(mv3,2)
> c2
     [,1]     [,2]       [,3]        [,4]       [,5]        [,6]
[1,] "Tennis" "Tennis"   "Tennis"    "Tennis"   "Tennis"    "Football"
[2,] "Tennis" "Football" "Athletics" "Football" "Athletics" "Athletics"

> # Example for expand.grid().
> mv4 = c("Red", "Blue", "Red")
> eg = expand.grid(Sport = mv3, Color = mv4)
> eg
       Sport Color
1     Tennis   Red
2     Tennis   Red
3   Football   Red
4  Athletics   Red
5     Tennis  Blue
6     Tennis  Blue
7   Football  Blue
8  Athletics  Blue
9     Tennis   Red
10    Tennis   Red
11  Football   Red
12 Athletics   Red

> # Example for permn().
> pn = permn(mv4)
> pn
[[1]]
[1] "Red"  "Blue" "Red"

[[2]]
[1] "Red"  "Red"  "Blue"

[[3]]
[1] "Red"  "Red"  "Blue"

[[4]]
[1] "Red"  "Blue" "Red"

[[5]]
[1] "Blue" "Red"  "Red"

[[6]]
[1] "Blue" "Red"  "Red"

combn() 출력에서 동일한 요소가 다른 요소와 결합됩니다. expand.grid()의 출력에는 동일한 행이 있고 permn() 출력의 각 행에 동일한 요소가 나타나며 일부 행도 동일합니다.

이것이 원하는 출력이 아닌 경우 추가 데이터 처리가 필요합니다. 일반적으로 가장 쉬운 옵션은 사용하는 벡터에 고유한 요소가 있는지 확인하는 것이며 이를 위해 unique() 함수를 사용할 수 있습니다.

예제 코드:

# 중복 제거 후 출력

# 빗()
c2_u = 빗(고유(mv3),2)
c2_u

# 확장.그리드()
eg_u = expand.grid(스포츠 = 고유(mv3), 색상 = 고유(mv4))
eg_u

# 파마()
pn_u = permn(고유(mv4))
pn_u

출력:

> # combn()
> c2_u = combn(unique(mv3),2)
> c2_u
     [,1]       [,2]        [,3]
[1,] "Tennis"   "Tennis"    "Football"
[2,] "Football" "Athletics" "Athletics"

> # expand.grid()
> eg_u = expand.grid(Sport = unique(mv3), Color = unique(mv4))
> eg_u
      Sport Color
1    Tennis   Red
2  Football   Red
3 Athletics   Red
4    Tennis  Blue
5  Football  Blue
6 Athletics  Blue

> # permn()
> pn_u = permn(unique(mv4))
> pn_u
[[1]]
[1] "Red"  "Blue"

[[2]]
[1] "Blue" "Red"

결론

분석이나 일러스트레이션을 위해 데이터를 생성해야 할 때 벡터 또는 여러 벡터에서 생각할 수 있는 모든 요소 조합을 생성하는 기능이 유용합니다.

이 기사에서 우리는 R에서 벡터의 조합과 순열을 생성하고 이러한 조합과 순열의 수를 계산하는 것이 얼마나 쉬운지 살펴보았습니다.

또한 벡터에서 동일한 요소의 효과를 살펴보고 문제를 처리하는 한 가지 방법을 확인했습니다.

작가: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

관련 문장 - R Vector