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
请注意:
名称列的数据类型是什么?它是字符还是包含向量的列表列?如果您包含数据的
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