gpt4 book ai didi

r - 使用 data.table 中的列名选择多个列范围

转载 作者:行者123 更新时间:2023-12-01 22:06:56 25 4
gpt4 key购买 nike

假设我有一个数据表,

dt = data.table(matrix(1:50, nrow = 5));
colnames(dt) = letters[1:10];

> dt
a b c d e f g h i j
1: 1 6 11 16 21 26 31 36 41 46
2: 2 7 12 17 22 27 32 37 42 47
3: 3 8 13 18 23 28 33 38 43 48
4: 4 9 14 19 24 29 34 39 44 49
5: 5 10 15 20 25 30 35 40 45 50

我想选择几个不连续的列范围,例如:ac:df:hj。这可以通过 dplyr 的 select() 轻松完成:

dt %>% select(a, c:d, f:h, j)

我正在寻找实现相同目标的data.table方法。

现在,我可以按任何顺序单独选择列:dt[ , .(a, c)] 或在形式 startcol:endcol:

dt[, c:f]

但是,我无法像在 dplyr::选择

最佳答案

我们可以使用 .SDcols 中的范围部分,然后通过连接附加另一列

dt[, c(list(a= a), .SD) , .SDcols = c:d]

如果有多个范围,我们通过match创建一个范围序列,然后得到对应的列名

i1 <- match(c("c", "f"), names(dt))
j1 <- match(c("d", "h"), names(dt))
nm1 <- c("a", names(dt)[unlist(Map(`:`, i1, j1))], "j")
dt[, ..nm1]
# a c d f g h j
#1: 1 11 16 26 31 36 46
#2: 2 12 17 27 32 37 47
#3: 3 13 18 28 33 38 48
#4: 4 14 19 29 34 39 49
#5: 5 15 20 30 35 40 50

此外,dplyr 方法可以在 data.table

中使用
dt[, select(.SD, a, c:d, f:h, j)]
# a c d f g h j
#1: 1 11 16 26 31 36 46
#2: 2 12 17 27 32 37 47
#3: 3 13 18 28 33 38 48
#4: 4 14 19 29 34 39 49
#5: 5 15 20 30 35 40 50

关于r - 使用 data.table 中的列名选择多个列范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51045709/

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