2017-10-21 5 views
-1

안녕하세요 여러분, 조합이 가장 빈번한 요소 쌍 목록을 만들려면 어떻게해야합니까? 두 벡터가 교차 표를 만들어서 가장 빈번한 두 벡터의 쌍을 찾고 싶다고 상상해보십시오. 목록 (예 : 2,3)으로 사용하면 첫 번째 벡터의 요소 2와 두 번째 벡터의 요소 3이 가장 빈번하게 결합됨을 의미합니다. 예를 들어 :테이블에있는 특정 요소의 좌표를 얻는 방법

mp<- c(1,1,1,1,2,2,3,4) 
mp1<- c("red", "red", "red", "red", "blue", "blue", "green", "pink") 

table(mp,mp1) 
    mp1 
mp blue green pink red 
    1 0  0 0 4 
    2 2  0 0 0 
    3 0  1 0 0 
    4 0  0 1 0 

내가 가장 자주 쌍 것을 볼 수있다 (1, "빨간색")하지만 어떻게 얻을 수있는 결과로?

+0

안녕하세요 오신 것을 환영합니다. 재현 가능한 예제를 제공해 주시겠습니까? 적어도 벡터 예제. 벡터에 중복 값이 ​​있습니까? – ANG

+0

감사합니다. 나는 그것을 함수에 넣고 싶다. 함수에 두 개의 길이가 같은 벡터를 제공하고 교차 표를 계산할 것이고 그 조합이 가장 빈번한 두 요소를 반환하기를 원할 것입니다. 예 : – cloe

+0

v1 <- c (2,3,2,3,5,6,7,8), v2 <- c (2,2,2,2,3,4,5,6) – cloe

답변

0

당신은 숫자 벡터에 문자열을 추가하는 문자 벡터의 모든 요소를 ​​변환하는 것이

v1 <- c(2,3,2,3) 
v2 <- c("blue", "red", "blue", "green") 
tbl <- table(v1, v2) 
tbl # most frequent combination: 2 & blue 
max(tbl) # most frequent combination = 2 
indices = which(tbl == max(tbl), arr.ind = TRUE) # indices for row and column of 
indices           # the max value 
v1.val = rownames(tbl)[indices[, 1]] 
v2.val = colnames(tbl)[indices[, 2]] 
res = c(v1.val, v2.val) 
res # result 

는 또한

v1 <- c(1,1,1,1,2,2,3,4) 
v2 <- c("red", "red", "red", "red", "blue", "blue", "green", "pink") 

주와 함께 작동합니다 이런 방식으로 기능을 디자인 할 수 있습니다 . 결과는 문자 벡터가됩니다.

+0

나는 typeof를 추가하여 각 요소의 원래 양식을 유지할 수 있습니까 ?? – cloe

+0

벡터 유형이 다른 경우에는 불가능합니다. 이것을보십시오'a <- c ("blue", 1)'; 'a'를 출력하면 같은 벡터에서 숫자와 문자를 결합 할 수 없기 때문에 R은''blue ""1 "'을 반환한다는 것을 알 수 있습니다. 'typeof (a)'는'character'로 변환 된 벡터의 모든 원소를'character'로 반환합니다. – ANG

0

첫째, 귀하의 벡터에서 dataframe합니다

mp<- c(1,1,1,1,2,2,3,4) 
mp1<- c("red", "red", "red", "red", "blue", "blue", "green", "pink") 
df <- data.frame(mp, mp1) 

이 그럼 당신은 many options to count combinations 있습니다. 나는 개인적으로 이렇게, dplyr 선호 :

count_table <- dplyr::count_(df, vars = c('mp','mp1')) 
count_table 
# A tibble: 4 x 3 
    mp mp1  n 
    <dbl> <fctr> <int> 
1  1 red  4 
2  2 blue  2 
3  3 green  1 
4  4 pink  1 

당신은 출력 첫 번째 행 할 수 있습니다에 StackOverflow에

count_table[1,] 
# A tibble: 1 x 3 
    mp mp1  n 
    <dbl> <fctr> <int> 
1  1 red  4