基于R中向量中每个列表的公共第一个元素,组合列表向量中的所有元素
我有一个相当大的列表向量(大约300000行)。 例如,让我们考虑如下:基于R中向量中每个列表的公共第一个元素,组合列表向量中的所有元素,r,list,vector,frequency,frequency-analysis,R,List,Vector,Frequency,Frequency Analysis,我有一个相当大的列表向量(大约300000行)。 例如,让我们考虑如下: vec = c( list(c("A",10,11,12)), list(c("B",10,11,15)), list(c("A",10,12,12,16)), list(c("A",11,12,16,17)) ) 现在,我想做以下工作: vec = c( list(c("A",10,11,12)), list(c("B",10,11,15)), list(c("A",10,12,12
vec = c(
list(c("A",10,11,12)),
list(c("B",10,11,15)),
list(c("A",10,12,12,16)),
list(c("A",11,12,16,17)) )
现在,我想做以下工作:
vec = c(
list(c("A",10,11,12)),
list(c("B",10,11,15)),
list(c("A",10,12,12,16)),
list(c("A",11,12,16,17)) )
对于向量中每个列表的每个唯一第一个元素,我需要向量中所有列表中与之对应的所有唯一元素,以及相应的频率
输出有点像:
对于A
,我将使用频率分别为2、2、4、2和1的元素10、11、12、16和17
。对于B
,它将是10,11,15
,频率1,1,1
多谢各位,
Ankur.这里有一种方法
首先,创建列表的简单方法是:
L <- list(c("A", 10, 11, 12),
c("B", 10, 11, 15),
c("A", 10, 12, 12, 16),
c("A", 11, 12, 16, 17))
扩大到包含300000个相似大小元素的列表:
L <- replicate(300000, c(sample(LETTERS, 1), sample(100, sample(3:4, 1))))
system.time(
freqs <- tapply(L, sapply(L, '[[', 1), function(x)
table(unlist(lapply(x, function(x) x[-1]))))
)
## user system elapsed
## 0.68 0.00 0.69
如果只想将特定组的值制成表格,例如组a
(以a
开头的向量),则可以将上述结果子集:
L2 <- tapply(L, sapply(L, '[[', 1), function(x)
sort(table(unlist(lapply(x, function(x) x[-1]))), decreasing=TRUE),
simplify=FALSE)
L2$A
其中,split
首先根据向量的第一个元素将L
拆分为多个组,然后我们使用$A
将A
子集为一组
首先,创建列表的简单方法是:
L <- list(c("A", 10, 11, 12),
c("B", 10, 11, 15),
c("A", 10, 12, 12, 16),
c("A", 11, 12, 16, 17))
扩大到包含300000个相似大小元素的列表:
L <- replicate(300000, c(sample(LETTERS, 1), sample(100, sample(3:4, 1))))
system.time(
freqs <- tapply(L, sapply(L, '[[', 1), function(x)
table(unlist(lapply(x, function(x) x[-1]))))
)
## user system elapsed
## 0.68 0.00 0.69
如果只想将特定组的值制成表格,例如组a
(以a
开头的向量),则可以将上述结果子集:
L2 <- tapply(L, sapply(L, '[[', 1), function(x)
sort(table(unlist(lapply(x, function(x) x[-1]))), decreasing=TRUE),
simplify=FALSE)
L2$A
其中,split
首先根据向量的第一个元素将L
拆分为多个组,然后我们使用$A
将A
子集为组(1)请检查代码的括号;(2) 你有一个向量列表,或者一个向量向量,但没有一个列表向量;(3) 你说的300000行是什么意思?;(4) 您是否知道,如果将字符元素与数字元素组合在一个原子向量中,整个向量将强制为字符?;(5) 请尝试澄清你的文章标题。我刚刚编辑,因为我假设它是一个平面向量,缺少一个括号。如果向量确实嵌套得更深,请还原编辑。我已经安排了代码来显示简单的嵌套。(2)我有一个由“vec”定义的列表向量。(3) 我的代码中“vec”的长度是300000。但是,这里我们可以使用这个简短的示例。(4) 我知道强迫。让我们假设整个向量是字符@jbaumsThank@Spacedman。这正是我的意思。@mtotois.vector(c(list(1,2,3),list(4,5,6))
不同意您的意见。(1)请检查代码的括号;(2) 你有一个向量列表,或者一个向量向量,但没有一个列表向量;(3) 你说的300000行是什么意思?;(4) 您是否知道,如果将字符元素与数字元素组合在一个原子向量中,整个向量将强制为字符?;(5) 请尝试澄清你的文章标题。我刚刚编辑,因为我假设它是一个平面向量,缺少一个括号。如果向量确实嵌套得更深,请还原编辑。我已经安排了代码来显示简单的嵌套。(2)我有一个由“vec”定义的列表向量。(3) 我的代码中“vec”的长度是300000。但是,这里我们可以使用这个简短的示例。(4) 我知道强迫。让我们假设整个向量是字符@jbaumsThank@Spacedman。这正是我的意思。@mtoto是.vector(c(list(1,2,3),list(4,5,6))
不同意你的观点。整洁,我唯一担心的解决方案可能是从300000个元素构造长向量(然后将其输入表
)。它可能比从元素增量循环和构建表的方法慢。继续,将数据扩展到300000个元素,看看需要多长时间!(回答:在一个300000长的列表中,每个列表中约有10个元素,3秒钟!)谢谢@jbaums。如果我想根据频率的降序对内部列表进行排序怎么办?@James1991-你的意思是对结果列表的向量进行排序吗?-请看我的编辑。所以对于“A”,它将是:121011617,频率421@jbaumsGreat@杰鲍姆斯。另一方面。如果我只想得到向量中指定的一些值的结果列表,那么?例如,假设我有一个向量,里面有“a”。然后,我只需要输出列表中的$A。整洁,我唯一担心的解决方案可能是从300000个元素构造长向量(然后将其输入到表中
)。它可能比从元素增量循环和构建表的方法慢。继续,将数据扩展到300000个元素,看看需要多长时间!(回答:在一个300000长的列表中,每个列表中约有10个元素,3秒钟!)谢谢@jbaums。如果我想根据频率的降序对内部列表进行排序怎么办?@James1991-你的意思是对结果列表的向量进行排序吗?-请看我的编辑。所以对于“A”,它将是:121011617,频率421@jbaumsGreat@杰鲍姆斯。另一方面。如果我只想得到向量中指定的一些值的结果列表,那么?例如,假设我有一个向量,里面有“a”。然后我只需要输出列表中的$A。