我想在数据框中每隔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()
),但无法弄清楚如何将其应用于此问题。
谢谢你的帮助!
答案 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