使用公共字符串从数据框中删除列,但保留第一个

时间:2016-10-20 14:04:36

标签: r

在我的数据框架中,我的列名如下:

stockA_1,stockA_2,stockA_3,stockA_4

我想从我的df中删除所有具有公共字符串"stockA_"的行,但我想只保留第一列具有此合成"stockA_1"

的行

怎么可能成功呢?

2 个答案:

答案 0 :(得分:2)

这可以通过基本功能完成:

d <- as.data.frame(matrix(1:35, 5, 7))
names(d) <- c("AA", "stockA_1", "BBB", "stockA_2", "stockA_3", "CCCCC", "stockA_4")
d[,-which(grepl("^stockA_", names(d)))[-1]]

结果是:

> d[,-which(grepl("^stockA_", names(d)))[-1]]
  AA stockA_1 BBB CCCCC
1  1        6  11    26
2  2        7  12    27
3  3        8  13    28
4  4        9  14    29
5  5       10  15    30

如果您想保留“stockA_1”列(最终不在“stockA _” - 列下的第一位),那么您可以

d <- as.data.frame(matrix(1:35, 5, 7))
names(d) <- c("AA", "stockA_11", "BBB", "stockA_2", "stockA_1", "CCCCC", "stockA_4")
i <- (!grepl("^stockA_", names(d))) | grepl("^stockA_1$", names(d))
d[,i]

结果:

> d[,i]
  AA BBB stockA_1 CCCCC
1  1  11       21    26
2  2  12       22    27
3  3  13       23    28
4  4  14       24    29
5  5  15       25    30

答案 1 :(得分:0)

使用数据表(如果我已正确理解问题):

require(data.table)
data <- data.table(stockA_1 = c(1, 2, 3), stockA_2 = c(3, 4, 7), stockA_3 = c(4, 5, 6))

columns <- setdiff(grep("stockA_", names(data)), grep("stockA_1", names(data)))
data[, (columns):= NULL]