选择列序列和创建变量

Selecting column sequences and creating variables

我想知道是否有办法通过序列 select 特定列并由此创建新变量。

例如,如果我有 8 列和 n 个观察值,我如何创建 4 个变量 selects 2 行顺序?我的数据集比这大得多,我有 1416 个变量,每个变量有 62 个观察值(我已将 link 粘贴到下面的电子表格中,其中第一列和第一行代表名称)。我想从这个名为站点 1-12 的站点创建新的数据帧。所以站点 1 = df[1:117];站点 2 = df [119:237] 等

我计划将此代码用于具有更多变量的未来数据集,因此如果有人可以阐明如何实现此目的,某种形式的循环或序列函数将非常有效?

https://www.dropbox.com/s/p1a5cu567lxntmw/MyData.csv?dl=0

提前谢谢你。

詹姆斯

p.s @nrussell 我已经复制并粘贴了您在下面提到的代码的输出,它跟随着显示的一系列数字。

dput(z[ , 1:10]) structure(list(1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0.0311410340342049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0207444023791158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0312971643732546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0376287494579976, 0, 0, 0, 0, 0, 0, 0),......... 10 = c(0, 0, 0, 0, 0.119280313679916, 0, 0, 0.301029995663981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.715681882079494, 0.136831816210901, 0, 0, 0, 0.0273663632421801, 0, 0, 0, 0.0547327264843602, 0, 0, 0, 0, 0.0231561535126139, 0, 0, 0.0903089986991944, 0, 0, 0.0752574989159953, 0.159368821233872, 0.0272640716982664, 0.0177076468037636, 0, 0, 0.120411998265592, 0, 0, 0, 0, 0.0322532138211408, 0.0250858329719984, 0, 0, 0, 0.119280313679916, 0, 0.172922500085254, 0.225772496747986, 0, 0, 0, 0.0954242509439325, 0)), .Names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), class = "data.frame", row.names = c(NA, -62L))

我们可以 split 具有“1416”列的数据集 ('df') 通过使用 gl

创建分组索引来等于大小“118”列
 lst <- setNames(lapply(split(1:ncol(df), as.numeric(gl(ncol(df), 118,
            ncol(df)))), function(i) df[,i]), paste0('site', 1:12))

或者您可以在不使用 split

的情况下创建 'lst'
 lst <- setNames(lapply(seq(1, ncol(df), by = 118), 
            function(i) df[i:(i+117)]), paste0('site', 1:12))

如果我们需要在全局环境中创建 12 个数据集对象,list2env 是一个选项(我更愿意在 'lst' 本身内工作)

 list2env(lst, envir=.GlobalEnv)

使用具有“8”列的小型数据集 ('df1')

  lst1 <- setNames(lapply(split(1:ncol(df1), as.numeric(gl(ncol(df1), 
         2, ncol(df1)))), function(i) df1[,i]), paste0('site', 1:4))
  list2env(lst1, envir=.GlobalEnv)

  head(site1,3)
  #  V1 V2
  #1  6 12
  #2  4  7
  #3 14 14

 head(site4,3)
 #  V7 V8
 #1 10  2
 #2  5  4
 #3  5  0

数据

set.seed(24)
df1 <- as.data.frame(matrix(sample(0:20, 8*10, replace=TRUE), ncol=8))