选择数据框中的个案

时间:2015-03-16 23:58:01

标签: r dataframe seq

我想在数据框中每隔N列选择一系列个案。我将用一个可重复的例子说明我的问题:

set.seed(100)
data <- data.frame(replicate(18,sample(0:100,18,rep=TRUE)))

根据数据,我想选择data[1:6, 1],然后选择data[7:12, 7],然后选择data[13:19, 13],依此类推。显然,我正在使用更大的数据集(> 10000行和列),这就是为什么我更喜欢自动化方式来实现这一点。
我曾尝试预先定义一个序列(seq()),但无法弄清楚如何将其应用于此问题。
谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

matrix索引在这里可能很方便:

sel <- cbind(sequence(nrow(data)),rep(seq(1,ncol(data),6),each=6))
sel

#      row  col
#      [,1] [,2]
# [1,]    1    1
# ...
# [6,]    6    1
# [7,]    7    7
# ...
#[12,]   12    7
#[13,]   13   13
# ...

然后:

data[sel]
# [1] 31 26 55  5 47 48 97  3 92 73 20 84 37 30 55 37 85 62

答案 1 :(得分:1)

目前尚不清楚您是想一次只需要一个子集,还是想一次想要所有子集。我将介绍这两种情况。

一次一个子集:

sub <- seq(1, 13, 6)

for (i in seq_along(sub)) {
    data.sub <- data[sub[i]:sub[i+1], sub[i]]

    # Do whatever you need to do with this subset
}

所有子集一次:

sub <- seq(1, 13, 6)

data.sub <- list()

for (i in seq_along(sub))
    data.sub[[i]] <- data[sub[i]:sub[i+1], sub[i]]

data.sub <- unlist(data.sub)

# Process this vector all at once