相关疑难解决方法(0)

data.table上有效的逐行操作

我需要找到行数最小的(+60)
相对较大data.frame(~250,000 x 3)(或者我可以等效地工作xts).

set.seed(1000)
my.df <- sample(1:5, 250000*3, replace=TRUE)
dim(my.df) <- c(250000,3)
my.df <- as.data.frame(my.df)
names(my.df) <- c("A", "B", "C")
Run Code Online (Sandbox Code Playgroud)

数据框my.df看起来像这样

> head(my.df)

  A B C
1 2 5 2
2 4 5 5
3 1 5 3
4 4 4 3
5 3 5 5
6 1 5 3
Run Code Online (Sandbox Code Playgroud)

我试过了

require(data.table)
my.dt <- as.data.table(my.df)

my.dt[, row.min:=0]  # without this: "Attempt to add new column(s) and set subset of rows at the same …
Run Code Online (Sandbox Code Playgroud)

r data.table

29
推荐指数
3
解决办法
2万
查看次数

相当于min()的rowMeans()

我已经看到在R邮件列表上多次询问这个问题,但仍然找不到满意的答案.

假设我是一个矩阵 m

m <- matrix(rnorm(10000000), ncol=10) 
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式获得每行的平均值:

system.time(rowMeans(m))  
   user  system elapsed   
  0.100   0.000   0.097
Run Code Online (Sandbox Code Playgroud)

但是获得每行的最小值

system.time(apply(m,1,min))  
   user  system elapsed   
 16.157   0.400  17.029
Run Code Online (Sandbox Code Playgroud)

需要的时间超过100倍,有没有办法加快速度?

optimization r

18
推荐指数
5
解决办法
1万
查看次数

标签 统计

r ×2

data.table ×1

optimization ×1