相关疑难解决方法(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万
查看次数

对 data.table 的行明智操作

假设我想逐行计算几列范围的大小。

set.seed(1)
dat <- data.frame(x=sample(1:1000,1000),
                  y=sample(1:1000,1000),
                  z=sample(1:1000,1000))
Run Code Online (Sandbox Code Playgroud)

使用 data.frame(),我会做这样的事情:

dat$diff_range <- apply(dat,1,function(x) diff(range(x)))
Run Code Online (Sandbox Code Playgroud)

更简单地说,我正在寻找这个操作,在每一行上:

diff(range(dat[1,]) # for i 1:nrow(dat)
Run Code Online (Sandbox Code Playgroud)

如果我对整个表都这样做,它会是这样的:

setDT(dat)[,diff_range := apply(dat,1,function(x) diff(range(x)))]
Run Code Online (Sandbox Code Playgroud)

但是我将如何仅对命名(或编号)行执行此操作?

r data.table

4
推荐指数
2
解决办法
2227
查看次数

如何使用data.table有效地计算行中位数

我有一个相当大的data.table(15M行,15列),我想要计算每行的中位数.我可以这样做

apply(DT, 1, median)  # DT is my data.table
Run Code Online (Sandbox Code Playgroud)

但这很慢.是否有更快,更适合数据的替代方案?

作为一个小工作的例子,如果我有

DT = data.table(a = c(1, 2, 4), b = c(6, 4, 7), 
                c = c(3, 9, 9), d = c(18, 1, -5))
#    a b c  d
# 1: 1 6 3 18
# 2: 2 4 9  1
# 3: 4 7 9 -5
Run Code Online (Sandbox Code Playgroud)

计算行中位数的最有效方法是什么?

apply(DT, 1, median)
# [1] 4.5 3.0 5.5
Run Code Online (Sandbox Code Playgroud)

r data.table

3
推荐指数
1
解决办法
976
查看次数

使用.SDcols对r中的data.table中的列值求和

DT <- data.table(A = 1:5, B = 2:6, C = 3:7)
Run Code Online (Sandbox Code Playgroud)

我想使用列索引对3列进行求和:

DT[, D := do.call(sum, .SD), .SDcols = 1:3]
Run Code Online (Sandbox Code Playgroud)

但是上面的代码不起作用,

我也不想用 DT[, D := (A+B+C)]

r data.table

2
推荐指数
1
解决办法
2342
查看次数

标签 统计

data.table ×4

r ×4