如何在R中按列表中的唯一值分组

如何在R中按列表中的唯一值分组,r,list,r-factor,R,List,R Factor,我的数据框有一个类列表变量(str输出给出:$X2:list of 125)。我希望在此列表中按唯一值分组以执行一些聚合函数,但在dplyr中使用group_by时,我得到: Error in eval(expr, envir, enclos) : cannot group column X2, of class 'list': A.)是否有方法根据列表中的唯一值进行分组?使用dplyr或其他分组函数? B.)是否有办法将列表变量转换为具有级别的因子变量?我不需要变量X2是一个列表,这就

我的数据框有一个类列表变量(str输出给出:
$X2:list of 125
)。我希望在此列表中按唯一值分组以执行一些聚合函数,但在dplyr中使用group_by时,我得到:

Error in eval(expr, envir, enclos) : 
  cannot group column X2, of class 'list':
A.)是否有方法根据列表中的唯一值进行分组?使用dplyr或其他分组函数? B.)是否有办法将列表变量转换为具有级别的因子变量?我不需要变量X2是一个列表,这就是值的生成方式。但我确实需要能够根据独特的值对_进行分组

我使用的数据帧具有以下结构:

    'data.frame':   125 obs. of  5 variables:
 $ MOV  : int  -69 -68 -67 -63 -62 -60 -59 -56 -55 -54 ...
 $ X    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Count: int  1 1 1 1 2 1 1 1 2 1 ...
 $ Perc : num  0.000179 0.000179 0.000179 0.000179 0.000358 ...
 $ X2   :List of 125
任何和所有的帮助都将不胜感激

编辑:以下是dput输出:

structure(list(MOV = c(-69L, -68L, -67L, -63L, -62L, -60L), X = 1:6, 
    Count = c(1L, 1L, 1L, 1L, 2L, 1L), Perc = c(0.000178922884236894, 
    0.000178922884236894, 0.000178922884236894, 0.000178922884236894, 
    0.000357845768473788, 0.000178922884236894), X2 = structure(list(
        range = "[ -69 , -35 )", range = "[ -69 , -35 )", range = "[ -69 , -35 )", 
        range = "[ -69 , -35 )", range = "[ -69 , -35 )", range = "[ -69 , -35 )"), .Names = c("range", 
    "range", "range", "range", "range", "range"))), .Names = c("MOV", 
"X", "Count", "Perc", "X2"), row.names = c(NA, 6L), class = "data.frame")

正如您已经发现的,无法使用
dplyr
X2
分组为列表。因此,您可以尝试的一种方法是转换为因子,然后按
X2
分组

如果您的data.frame被调用为
df
请尝试以下操作:

df$X2 <- as.factor(unlist(df$X2))

df$X2下面的代码就可以了,尤其是在列表列中某些元素的长度大于2的情况下。但是,这并不高效:如果您的数据帧中有许多行,并且df$X2列表中有许多唯一的值,则可能需要几个小时

首先创建一个只包含感兴趣列表中唯一元素的列表

ulist <- unique(df$X2)

ulist您能否提供dput(head(yourdata))的输出以使其可复制?我有一些关于如何将列表转换为字符向量的想法,但我希望能找到一种不改变任何内容的快速分组方法。@初学者:结构(list(MOV=c(-69L,-68L,-67L,-63L,-62L,-60L),X=1:6,Count=c(1L,1L,1L,1L,2L,1L),Perc=c(0.00,0.00,0.00,0.00,0.00,0.00),X2=structure(list(range)(range=“[-69,-35)”,range=“[-69,-35)”,range=“[-69,-35)”,range=“-69,-35)”,range=“-69,-35)”,range=“-69,-35)”,range=“-69,-35)”,.Names=c(“range”,“range”,“range”,“range”,“range”,“range”,“range”,“range”,“range”,“range”,“range”,“range”)),.Names=c(“MOV”,“X”,“Count”,“Perc”,“X2”),row.Names=c(NA,6L),class=“data.frame”)
df$id<- rep(NA,nrow(df))
for(i in 1:length(ulist)){
  
  df$id[df$X2 %in% ulist[i]] <- i
  
}