R-选择具有最大计数的行

R-选择具有最大计数的行,r,R,我得到的数据如下: surname name a b,a,c,e b a,b,c,d,f c a,d,c,e d a,c,e,f,j,k e b,d,e,g 现在我必须改变三个姓氏的子集(a、b、c或b、c、d等),这三个姓氏与最多的名字相关。换句话说,如果我改变姓氏a、b和e,我会得到6个名字(a、b、c、d、e、g),但如果我改变姓氏ab和c,我只会得到4个名字。目标是通过选择相同的姓氏获得尽可能多的名字 输出应类似于以下内容(对

我得到的数据如下:

surname name
a       b,a,c,e
b       a,b,c,d,f
c       a,d,c,e
d       a,c,e,f,j,k
e       b,d,e,g
现在我必须改变三个姓氏的子集(a、b、c或b、c、d等),这三个姓氏与最多的名字相关。换句话说,如果我改变姓氏a、b和e,我会得到6个名字(a、b、c、d、e、g),但如果我改变姓氏ab和c,我只会得到4个名字。目标是通过选择相同的姓氏获得尽可能多的名字

输出应类似于以下内容(对于三元组中所有可能的姓氏组合):


有什么简单的方法可以做到这一点吗?我想我应该选择所有可能的姓氏组合,然后计算姓名的数量,但是我的data.frame相当大(大约1000行),所以需要花费太长的时间。我能做什么?

不确定这是否更快:

数据:(请在下一个问题中提供可复制的数据(请参见
dput()

结果:

#   chosen_sname length
#1         a,b,c      6
#2         a,b,d      8
#3         a,b,e      7
#4         a,c,d      8
#5         a,c,e      6
#6         a,d,e      9
#7         b,c,d      8
#8         b,c,e      7
#9         b,d,e      9
#10        c,d,e      9
请注意:

  • 为此,您的变量需要命名为数据:部分:
  • 更改所选名称以查看其他名称组合
  • 您的示例包含一个错误。“a,d,e”是9

  • 名称列的数据类型是什么?它是字符还是包含向量的列表列?如果您包含数据的
    dput
    dput(您的_df
    )@Moody\u mudscappper name列包含带字符的字符串(非列表),则会更清晰我不完全清楚你想要什么,你能包括你的预期输出吗?最好在你的问题中显示你想要的输出。@anba,请在你的问题中包括它,而不是评论Hanks,它似乎更快。但是-我需要获得所有可能的姓氏组合的“长度”balue(不仅仅是这三个样本).我应该如何更改第一行(combn函数?)?您所说的“所有可能的组合”是什么意思?共有3种组合?在本例中,对于a、b、c;a、b、e;b、c、d;b、c、e;c、d、e;a、d、d;a、d、e;a、c、e。我必须检查“长度”对于所有可能的三个姓氏的选择。我的真实数据包含超过100行,这不方便只在向量中给出。谢谢,它工作得很好。我纠正了我示例中的错误。很高兴提供帮助。有趣的问题。
    df1<-data.frame(surname=letters[1:5],
                      name=c("b,a,c,e",
                      "a,b,c,d,f",
                      "a,d,c,e",
                      "a,c,e,f,j,k",
                      "b,d,e,g"),stringsAsFactors=F)
    
    library(magrittr)    
    #chosen_sname=c("a,b,c","a,c,d","a,d,e")
    chosen_sname=combn(df1$surname,3) %>% data.frame(.,stringsAsFactors=F) %>% sapply(function(x){paste0(x,collapse=",")}) %>% unname
    
    
    namesList = df1$name %>% strsplit(",")
    colsList  = chosen_sname %>% strsplit(",") %>% lapply(function(x)match(x,df1$surname))
    
    sapply(colsList,function(x){namesList[x] %>% unlist %>% unique %>% length}) %>% data.frame(chosen_sname,length=.,stringsAsFactors=F)
    
    #   chosen_sname length
    #1         a,b,c      6
    #2         a,b,d      8
    #3         a,b,e      7
    #4         a,c,d      8
    #5         a,c,e      6
    #6         a,d,e      9
    #7         b,c,d      8
    #8         b,c,e      7
    #9         b,d,e      9
    #10        c,d,e      9