r - 首先按组,然后对于 R data.table 中的每个其他组成员都相同

标签 r data.table

我有一个data.table,我想为其添加一列,该列为第一个组成员按组计算一次随机统一数,然后复制该组其余成员的结果。让我们看一下这个例子:

DT = data.table(
  ID = c("b","b","b","a","a","c"),
  code = letters[sample(1:26,6)],
  numvar = rnorm(15,0,1)
)

setorder(DT, ID, code)
set.seed(123)
DT[, Z:=runif(.N), by=ID]; DT

    ID code      numvar         Z
 1:  a    h  0.23821292 0.2875775
 2:  a    h -0.73350322 0.7883051
 3:  a    u -1.04889314 0.4089769
 4:  a    u -0.21586539 0.8830174
 5:  b    b  0.54909674 0.9404673
 6:  b    b -0.78438222 0.0455565
 7:  b    b  1.07061054 0.5281055
 8:  b    g  2.52833655 0.8924190
 9:  b    g -0.05568601 0.5514350
10:  b    g -0.08542326 0.4566147
11:  b    x  0.50381245 0.9568333
12:  b    x  0.82553984 0.4533342
13:  b    x -1.08569914 0.6775706
14:  c    s  1.29476325 0.5726334
15:  c    s -0.33491276 0.1029247

在期望的结果中,0.2875775Z 值将适用于所有 a0.9404673 适用于所有 b 等等。理想情况下,我想要一个不需要订购的解决方案,这就是为什么我不想使用 shift 函数之类的东西。更好的方法是使用 IDcode 作为双 key ,一旦有 ID 的解决方案,这可能就没有问题了

我尝试过的:

DT[DT[, .SD[1], by=ID], Z:= runif(.N)]

这不起作用,而且只会让我获得第一个组成员的值。

有什么想法吗?

顺便说一句:第一个或最后一个或中间的任何组成员并不重要。每组只有一个值就很好了。

最佳答案

这是您要找的吗?

DT[, Z := rep(runif(1), .N), by = ID]

    ID code      numvar         Z
 1:  b    u -0.86960052 0.9436197
 2:  b    g -0.82605044 0.9436197
 3:  b    q  0.57032375 0.9436197
 4:  a    m  0.56402400 0.2311390
 5:  a    b  1.26068851 0.2311390
 6:  c    l  0.33497025 0.5874900
 7:  b    u -0.24415676 0.9436197
 8:  b    g  0.04127355 0.9436197
 9:  b    q -0.21508139 0.9436197
10:  a    m -0.55698196 0.2311390
11:  a    b -0.88621853 0.2311390
12:  c    l -1.78180519 0.5874900
13:  b    u -0.68728262 0.9436197
14:  b    g  1.07801966 0.9436197
15:  b    q  1.11599245 0.9436197

关于r - 首先按组,然后对于 R data.table 中的每个其他组成员都相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57144376/

相关文章:

r - 使用总体数据中的比率进行插值

r - 显示大于或等号

r - 如何以编程方式设置 tibble 列类型

r - 禁止在选项卡之间行走 Shiny

c++ - Rcpp 可以公开一个引用同一类的 C++ 类方法吗?

具有多个条件的 data.table 中的排名

r - 将 R data.table 插入/更新到 PostgreSQL 表中

r - 更改 for 循环以覆盖多个文件

r - 当某些条件适用时允许最大条目数

r - 分组是否在data.table 1.12.0中并行化?