2017-10-21 264 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