相关疑难解决方法(0)

更快的组合版本

有没有办法加快combn命令,以获得从矢量中取出的2个元素的所有独特组合?

通常这将设置如下:

# Get latest version of data.table
library(devtools)
install_github("Rdatatable/data.table",  build_vignettes = FALSE)  
library(data.table)

# Toy data
d <- data.table(id=as.character(paste0("A", 10001:15000))) 

# Transform data 
system.time({
d.1 <- as.data.table(t(combn(d$id, 2)))
})
Run Code Online (Sandbox Code Playgroud)

但是,combn使用data.table计算所有可能的组合要慢10倍(23秒对比我的计算机3秒).

system.time({
d.2 <- d[, list(neighbor=d$id[-which(d$id==id)]), by=c("id")]
})
Run Code Online (Sandbox Code Playgroud)

处理非常大的向量,我正在寻找一种通过仅计算唯一组合(如combn)来节省内存的方法,但是使用data.table的速度(参见第二个代码片段).

我感谢任何帮助.

combinations r combn data.table

12
推荐指数
5
解决办法
2555
查看次数

table() 有没有有效的替代方法?

我使用以下命令:

table(factor("list",levels=1:"n")
Run Code Online (Sandbox Code Playgroud)

使用 "list": (example) a = c(1,3,4,4,3) and levels = 1:5,还要考虑 2 和 5。对于非常大的数据集,我的代码似乎非常无效。

有没有人知道隐藏的库或代码片段以使其更快?

performance r count tabulate

11
推荐指数
6
解决办法
852
查看次数

累积 R 中每个可能组合的值

假设我有数据test(给定的 dput),其中 list-col 说items

test <- structure(list(items = list('a', c('b', 'c'), c('d', 'e'), 'f', c('g', 'h')),
               ID = c(1,1,1,2,2)), row.names = c(NA, 5L), class = "data.frame")

library(tidyverse)
test %>% group_by(ID) %>%
  mutate(dummy = accumulate(items, ~paste(.x, .y)))
Run Code Online (Sandbox Code Playgroud)

我得到一个像这样的 list-col 输出

  items ID        dummy
1     a  1            a
2  b, c  1     a b, a c
3  d, e  1 a b d, a c e
4     f  2            f
5  g, h  2     f g, f h …
Run Code Online (Sandbox Code Playgroud)

expand r dataframe accumulate tidyverse

9
推荐指数
4
解决办法
532
查看次数