我有一个大型数据集,我试图通过根据算术级数选择列来进行子集化。 我的数据集有370列。我想每18列删除6列。 我做的是
a=seq(from=5, to =365, by=18)
# num [1:21] 5 23 41 59 77 95 113 131 149 167 ...
和
b=seq(from=10, to =370, by=18)
找到我需要删除的列数。
我基本上需要删除列:-[a:b]
,意思是[c(-5:-10,-(5+1*18):-(5+1*18),-(5+2*18):-(5+2*18),etc)
我尝试创建一个for循环,如下所示:
for(i in 1:21) {temp <- subset(set, select = -c( a[i]:b[i]))}
# Error in a[i]:b[i] : NA/NaN argument
但它没有用,因为我收到了这个错误!
答案 0 :(得分:3)
答案 1 :(得分:1)
确切地知道&#34;每18列删除6列&#34;实际上意味着,但这里有一种解释,即删除18组中的最后6列:
smlset <- set[ , c( rep(TRUE, 12), rep(FALSE, 6) ) ]
如果您希望删除18个组中的第5列到第10列,则为:
smlset <- set[ , c( rep(TRUE, 4), rep(FALSE, 6), rep(TRUE,8) ) ]
答案 2 :(得分:0)
您也可以尝试
set.seed(42)
set <- matrix(sample(25, 370*5,replace=TRUE), ncol=370, dimnames=list(NULL,1:370))
set[,-sort(5+(0:trunc(370/18))*18 +rep(0:5, each=ceiling(370/18)))]