使用循环到子集数据集列R.

时间:2014-07-15 05:22:42

标签: r

我有一个大型数据集,我试图通过根据算术级数选择列来进行子集化。 我的数据集有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

但它没有用,因为我收到了这个错误!

3 个答案:

答案 0 :(得分:3)

请阅读

Why is `[` better than `subset`?

了解为什么subset不合适。

set[,-unlist(Map(":",a,b))]

将返回你想要的东西。

答案 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)))]