我需要找到许多(+60)相对较大的data.frame(~250000 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")

数据帧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

我试过了

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 time"
system.time(
  for (i in 1:dim(my.dt)[1]) my.dt[i, row.min:= min(A, B, C)]
)

在我的系统上,这大约需要400秒.它是有效的,但我不相信它是使用data.table的最佳方式.

推荐答案

或者,只有pmin个.

my.dt <- as.data.table(my.df)
system.time(my.dt[,row.min:=pmin(A,B,C)])
# user  system elapsed 
# 0.02    0.00    0.01 
head(my.dt)
#      A B C row.min
# [1,] 2 5 2       2
# [2,] 4 5 5       4
# [3,] 1 5 3       1
# [4,] 4 4 3       3
# [5,] 3 5 5       3
# [6,] 1 5 3       1

R相关问答推荐

如何使用TukeyHSD绘制事后概率热图

将虚线添加到每个站点的传奇中平均

使用case_when和Mutate搜索多个列以寻找条件

是否有R代码来判断一个组中的所有值是否与另一个组中的所有值相同?

R中的枢轴/转置

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

在边界外添加注释或标题

根据收件箱中的特定值提取列名

名称输出pmap on tible

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

Highcharter多次钻取不起作用,使用不同方法

如何使用按钮切换轨迹?

识别连接的子网(R-igraph)

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

安全地测试文件是否通过R打开

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

如何使用包metaviz更改标签的小数位数?

禁用时,SelecizeInput将变得不透明

分隔日期格式为2020年7月1日

使用dqur在不同变量上创建具有多个条件的变量