2017-10-21 82 views
-1

嘿,你知道我該如何製作一組元素組合最頻繁的元素列表? 想象一下,我有兩個向量,我執行交叉製表,我想找到最頻繁的那兩個向量對。並將其作爲列表(例如(2,3)),這意味着第一個向量的元素2和第二個向量的元素3的組合是最頻繁的。 例如:如何獲取表中某個特定元素的座標r

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

您好,歡迎StackOverflow上。你能提供一個可重複的例子嗎?至少是一個向量的例子。你的向量中有一些重複的值? – 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'中被轉換了 – ANG

0

首先,從你的載體使數據幀:

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 

您可以輸出只有第一行:

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