R:使用具有数字位置的重复列名来子集data.table

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R:使用具有数字位置的重复列名来子集data.table相关的知识,希望对你有一定的参考价值。

我有一个看起来像这样的data.table

> dput(DT)
   A B C A B C D
1: 1 2 3 3 5 6 7
2: 2 1 3 2 1 3 4

这是输入

DT <- structure(list(A = 1:2, B = c(2L, 1L), C = c(3L, 3L), A = c(3L, 
  2L), B = c(5L, 1L), C = c(6L, 3L), D = c(7L, 4L)), .Names = c("A", 
  "B", "C", "A", "B", "C", "D"), row.names = c(NA, -2L), class = c("data.table", 
  "data.frame"))

基本上,我想根据标题对它们进行子集化。所以对于标题“B”,我会这样做:

subset(DT,,grep(unique(names(DT))[2],names(DT)))
   B B
1: 2 2
2: 1 1

如您所见,值是错误的,因为第二列只是第一列的重复。我希望得到这个:

   B B
1: 2 5
2: 1 1

有人可以帮我吗?

答案

以下替代方案适合我:

pos <- grep("B", names(DT))
DT[, pos, with = FALSE]
#    B B
# 1: 2 5
# 2: 1 1
DT[, grep("B", names(DT)), with = FALSE]
#    B B
# 1: 2 5
# 2: 1 1
DT[, names(DT) %in% unique(names(DT))[2], with = FALSE]
#    B B
# 1: 2 5
# 2: 1 1

这也有效:

DT[, .SD, .SDcols = grep("B", names(DT))]
#    B B
# 1: 2 5
# 2: 1 1

以上是关于R:使用具有数字位置的重复列名来子集data.table的主要内容,如果未能解决你的问题,请参考以下文章

在 R 函数中为子集插入列名时遇到问题

循环遍历 R 中列名的特定子集

使用数据表对子集执行操作

更改 R 中数据框列表中的列名子集

使用列名列表从数据表中选择匹配的列[重复]。

如何使用 R 中指定的列名创建空数据框? [复制]