gpt4 book ai didi

r - 有没有办法不将 `by` 列作为 data.table 分组中的第一列返回

转载 作者:行者123 更新时间:2023-12-04 12:33:36 26 4
gpt4 key购买 nike

如果我使用 by 进行分组data.table 中的关键字它总是返回 by列作为第一列。是否有一个标志/选项告诉它不要这样做?还是摆脱它的聪明方法?

特别是我想分组然后rbindlist到我原来的表,所以事实上这个问题也可以说是 - “如何阻止它重新排序列”

例如:

DT = data.table(I = as.numeric(1:6), N = rnorm(6), L = rep(c("a", "b", "c"), 2))
DT[, list(I = mean(I), N = mean(N)), by= L]
DT

给出:
> DT[, list(I = mean(I), N = mean(N)), by= L]
L I N
1: a 2.5 0.4291802
2: b 3.5 0.6669517
3: c 4.5 -0.6471886
> DT
I N L
1: 1 1.8460998 a
2: 2 0.7093438 b
3: 3 -1.7991193 c
4: 4 -0.9877394 a
5: 5 0.6245596 b
6: 6 0.5047421 c

至于 rbindlist请求进行,能够做到这一点会很好:
DT = rbindlist(list(DT, DT[, list(I = mean(I), N = mean(N)), by= L]))

也许
DT = rbindlist(list(DT, DT[, list(I = mean(I), N = mean(N), L), by= L]))

或类似的东西(两者都不起作用)

最佳答案

我也不是特别喜欢这种自动列重新排序。我通常做的“技巧”是使用 setcolorder得到输出后如下:

DT <- data.table(I = 1:6, N = rnorm(6), L = rep(c("a", "b", "c"), 2))
DT.out <- DT[, list(I = mean(I), N = mean(N)), by= L]

在这里, setcolorder作为:
setcolorder(DT.out, names(DT))

# I N L
# 1: 2.5 0.772719306 a
# 2: 3.5 -0.008921738 b
# 3: 4.5 -0.770807996 c

当然,如果 DT 的名称有效与 DT.out 相同.否则,您必须将列顺序明确指定为:
setcolorder(DT.out, c("I", "N", "L"))

编辑:由于您想立即按行绑定(bind)它们,是的,最好不要将其作为中间结果。自从 rbindlist似乎是按位置绑定(bind)的,你可以使用 rbind通过列名和 data.table 绑定(bind)将此作为警告并建议使用 use.names=F如果你想改为按位置绑定(bind)。您可以放心地忽略此警告。
dt1 <- data.table(x=1:5, y=6:10)
dt2 <- data.table(y=1:5, x=6:10)

rbind(dt1, dt2) # or do.call(rbind, list(dt1, dt2))

# x y
# 1: 1 6
# 2: 2 7
# 3: 3 8
# 4: 4 9
# 5: 5 10
# 6: 6 1
# 7: 7 2
# 8: 8 3
# 9: 9 4
# 10: 10 5
# Warning message:
# In .rbind.data.table(...) :
# Argument 2 has names in a different order. Columns will be bound by name for
# consistency with base. Alternatively, you can drop names (by using an unnamed
# list) and the columns will then be joined by position. Or, set use.names=FALSE.

关于r - 有没有办法不将 `by` 列作为 data.table 分组中的第一列返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15039715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com