在我的数据框架中,我的列名如下:
stockA_1,stockA_2,stockA_3,stockA_4
我想从我的df中删除所有具有公共字符串"stockA_"
的行,但我想只保留第一列具有此合成"stockA_1"
怎么可能成功呢?
答案 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]