对数据表进行行操作 [英] Row wise operation on data.table

查看:113
本文介绍了对数据表进行行操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我想在一行一行的基础上计算几个列的范围的幅度。

Let's say I'd like to calculate the magnitude of the range over a few columns, on a row-by-row basis.

set.seed(1)
dat <- data.frame(x=sample(1:1000,1000),
                  y=sample(1:1000,1000),
                  z=sample(1:1000,1000))

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

Using data.frame(), I would do something like this:

dat$diff_range <- apply(dat,1,function(x) diff(range(x)))

为了更简单,我在寻找这个操作,在每一行:

To put it more simply, I'm looking for this operation, over each row:

diff(range(dat[1,]) # for i 1:nrow(dat)



如果我为整个表,它将是:

If I were doing this for the entire table, it would be something like:

setDT(dat)[,diff_range := apply(dat,1,function(x) diff(range(x)))]

)rows?

推荐答案

pmax 以向量化方式查找列之间的最小值和最大值,这比单独分割和处理每一行要好得多。它也很简洁:

pmax and pmin find the min and max across columns in a vectorized way, which is much better than splitting and working with each row separately. It's also pretty concise:

dat[, r := do.call(pmax,.SD) - do.call(pmin,.SD)]


        x   y   z   r
   1: 266 531 872 606
   2: 372 685 967 595
   3: 572 383 866 483
   4: 906 953 437 516
   5: 201 118 192  83
  ---                
 996: 768 945 292 653
 997:  61 231 965 904
 998: 771 145  18 753
 999: 841 148 839 693
1000: 857 252 218 639

这篇关于对数据表进行行操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆