我需要以这样一种方式提取列:我先选择一列,然后再选择相隔 288 列的下一列。例如:
datanew <- data[, c(8, 296, 9, 297, 10, 298, 11, 299, 12, 300 etc)]
我需要这样做直到 288、576。
有人可以建议是否有更快的方法吗?
最佳答案
有点像
first_columns <- 8:288
next_columns <- first_columns+288
comb <- c(rbind(first_columns, next_columns))
这是棘手的部分 - 因为 R 以列优先顺序存储矩阵,所以创建一个两行矩阵然后使用 c()
将其折叠为一个向量将生成一个交错向量列号。 (检查 head(comb)
显示 8 296 9 297 10 298 ...
按要求。)
然后执行data[, comb]
。
另一种更明确的方法:
comb <- rep(NA_real_, 2*(288-7)) ## set up vector (could also use numeric())
odds <- seq(1,length(comb), by=2)
evens <- seq(2, length(comb), by=2)
comb[odds] <- 8:288
comb[evens] <- comb[odds] + 288
关于r - 如何通过配对列来对数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64733138/