分割具有重复分割的数据框并命名新列表

我有一个看起来像这样的数据框:

   cat        split_me       
   <chr>      <chr>          
 1 MVHYM7693B c(1,7)        
 2 ZRRBS1363E c(2,7,18)    
 3 ZXYLV2407F 3              
 4 HXPPE8608M 4              
 5 JDARX0644Q c(5,19)       
 6 HDBOK8136L 6              
 7 DCJPS0833K c(1,2,18) 

我可以使用以下方法拆分数据:

splt <- to_split %>% 
  split(.$split_me)

哪个列出了19个元素。但是原始数据有20个元素。自身重复的拆分为拆分c(5,19)。如何忽略此重复并将c(5,19)拆分两次?

我想根据catto_split列的名称来命名拆分,因此c(5,19)将具有不同的名称(JDARX0644Q)和(BZRXF3978Z)。

数据:

to_split <- structure(list(cat = c("MVHYM7693B","ZRRBS1363E","ZXYLV2407F","HXPPE8608M","JDARX0644Q","HDBOK8136L","DCJPS0833K","UGDYS1458B","ROQIP3617B","HZMGG4347S","EHESH8836T","YGXZY0073I","nmRDZ9798F","WXBKD9937H","JEMQK6388P","qqMSV0889M","IBMJM4467Q","IOIDB2993Q","BZRXF3978Z","NJLNW3044Z"),split_me = c("c(1,7)","c(2,18)","3","4","c(5,19)","6","c(1,"8","9","10","11","12","c(13,"14","15","16","17",13,"20")),class = c("tbl_df","tbl","data.frame"),row.names = c(NA,-20L))

编辑:

我认为最适合我的数据的是重新排列split_me列。目前数据如下:

# A tibble: 20 x 2
   cat        split_me       
   <chr>      <chr>          
 1 MVHYM7693B c(1,18) 
 8 UGDYS1458B 8              
 9 ROQIP3617B 9              
10 HZMGG4347S 10             
11 EHESH8836T 11             
12 YGXZY0073I 12             
13 nmRDZ9798F c(13,18)      
14 WXBKD9937H 14             
15 JEMQK6388P 15             
16 qqMSV0889M 16             
17 IBMJM4467Q 17             
18 IOIDB2993Q c(2,18)
19 BZRXF3978Z c(5,19)       
20 NJLNW3044Z 20

1中的c(1,7)对应于数据的第1行,7对应于7行。我认为我应该重新安排该列,以便:

2不变。即c(2,18)-2是第一个,因此不需要更改。由于5中的5是第一个并且与行号c(5,19)相匹配,因此行5也不改变。

7行更改。最初它是c(1,18),但是7是序列中的第三个,我想将其移到第一个。 c(7,1,18)

13不变。 第18行更改-原始c(2,18)所需的输出c(18,13) 第19行更改-原始c(5,19)所需的输出c(19,5)

这应该可以解决重复的问题以及我稍后在代码中遇到的问题。例如,我试图将其拆分为c(5,19)5中包含的数据将是arranged或高于19中的数据(在数据帧中) 。然后,对于拆分c(19,5)19中的数据将位于5中的数据之上。 (我希望这是有道理的)

wangyaping570133559 回答:分割具有重复分割的数据框并命名新列表

您可以尝试粘贴然后拆分,这样cat也将包括在内,即

split(to_split,do.call(paste,to_split)) 

长度为20

length(split(to_split,to_split)))
#[1] 20

这里是dplyr方法,

library(dplyr)

to_split %>% 
 group_by_all() %>% 
 group_split()

do.call(...)拆分后的名称的格式为cat split_me。要仅根据您的cat变量来命名列表,我们就可以做到

setNames(the_list_after_spliting,to_split$cat)

但是,如果您有全部重复项,

setNames(the_list_after_spliting,to_split$cat[!duplicated(do.call(paste,to_split))])
,

您可以基于splitcat,该列将自动用cat命名列表

split(to_split,to_split$cat)

dplyr中,可以使用group_split完成操作,但需要单独添加名称

library(dplyr)
to_split %>% group_split(cat) %>% setNames(to_split$cat) 
本文链接:https://www.f2er.com/3159183.html

大家都在问