选择列序列和创建变量
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))
我想知道是否有办法通过序列 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
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 <- 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))