R 选择列序列并创建变量

R 选择列序列并创建变量,r,dataframe,seq,R,Dataframe,Seq,我想知道是否有办法通过序列选择特定的列并从中创建新的变量 例如,如果我有8列,其中有n个观察值,我如何创建4个变量,依次选择2行?我的数据集比这个大得多,我有1416个变量,每个变量有62个观察值(我粘贴了一个到下面电子表格的链接,其中第一列和第一行代表名称)。我想从这个名为sites 1-12的站点创建新的数据帧。场地1=df[,1:117];场地2=df[119:237]等 我计划在未来的数据集中使用这段代码,其中包含更多的变量,因此,如果有人能够解释如何实现这一点,那么某种形式的循环或序列

我想知道是否有办法通过序列选择特定的列并从中创建新的变量

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

我计划在未来的数据集中使用这段代码,其中包含更多的变量,因此,如果有人能够解释如何实现这一点,那么某种形式的循环或序列函数将非常有效

先谢谢你

詹姆斯

p、 s@nrussell我复制并粘贴了您在下面提到的代码的输出,它以一系列数字的形式显示出来

dput(z[,1:10]) 结构(列表(
1
=c(0,0,0,0,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.22577246747986,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))


通过使用
gl

 lst <- setNames(lapply(split(1:ncol(df), as.numeric(gl(ncol(df), 118,
            ncol(df)))), function(i) df[,i]), paste0('site', 1:12))
如果我们需要在全局环境中创建12个数据集对象,
list2env
是一个选项(我更愿意在“lst”本身中工作)

使用具有“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

lst1请添加实际数据集的样本。如果它有许多行和/或列,您可以使用
dput(数据[1:50,1:5])
(假设
data
是一个
data.frame
matrix
)例如。正如@nrussell所提到的,添加一个示例数据和预期结果将更快地得到响应。目前,数据看起来令人困惑。如果显示的数据有8列,则每2列选择一列,表示1:2、3:4、5:6、7:8或其他什么?如果R中已经有数据,您可能需要检查此链接,然后运行
dput(z[,1:10])
并将输出粘贴到问题中。屏幕截图一点用处都没有。@nrussell我已经编辑了上面的回复,我希望这是清楚的。感谢您迄今为止的帮助。这似乎在正确的行上,当我键入str(lst)时,它似乎已将其划分为正确数量的行。有没有办法从这里选择一个特定的站点(例如,如果我想把站点7作为一个单独的变量)。Site_7@JamesWhite
list2env
将在全局空间中创建对象。运行
list2env
Yes后,在控制台上键入
site7
,此操作已成功!你是个救生员,谢谢你的帮助@akrun
 list2env(lst, envir=.GlobalEnv)
  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))