我的数据框有一个类列表变量(str输出给出:$ X2 :List of 125
)。我想按照此列表中的唯一值进行分组以执行某些聚合函数,但是当我在dplyr中使用group_by时,我得到:
Error in eval(expr, envir, enclos) :
cannot group column X2, of class 'list':
答。)有没有办法按列表中的唯一值进行分组?使用dplyr还是其他一些分组功能? B.)有没有办法将列表变量转换为具有级别的因子变量?我不需要将变量X2作为列表,这就是如何生成值。但我确实需要能够group_by唯一值。
我使用的数据框架具有以下结构:
'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
任何和所有帮助将不胜感激。
编辑:这是输出输出:
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")
答案 0 :(得分:1)
正如您已经发现的那样,无法使用X2
将dplyr
分组为列表。因此,您可以尝试的一种方法是转换为因子,然后按X2
进行分组。
如果您的data.frame被调用df
,请尝试以下操作:
df$X2 <- as.factor(unlist(df$X2))
之后,您可以使用dplyr
按任意变量进行分组,包括X2
答案 1 :(得分:0)
下面的代码可以做到这一点,尤其是在列表列中某些元素的长度大于2的情况下。但这并不有效:如果您的数据帧中有很多行并且您的表中有很多唯一值列出df $ X2,可能需要几个小时。
首先创建一个仅包含您感兴趣列表中唯一元素的列表
ulist <- unique(df$X2)
然后,对于每个唯一元素,确定数据的哪些行中具有与该唯一元素匹配的X2元素,并为这些行提供一个公共索引(列ID)
df$id<- rep(NA,nrow(df))
for(i in 1:length(ulist)){
df$id[df$X2 %in% ulist[i]] <- i
}