根据for循环中的索引分配变量

根据for循环中的索引分配变量,r,R,因此,我在R中遇到了一个小问题。我有多个数据集(data0、data1,…),我希望执行以下操作: data01 <- data0[1:6,] data02 <- data0[7:12,] data11 <- data1[1:6,] data12 <- data1[7:12,] data21 <- data2[1:6,] data22 <- data2[7:12,] data31 <- data3[1:6,] data32 <- data3[7:1

因此,我在R中遇到了一个小问题。我有多个数据集(data0、data1,…),我希望执行以下操作:

data01 <- data0[1:6,]
data02 <- data0[7:12,]
data11 <- data1[1:6,]
data12 <- data1[7:12,]
data21 <- data2[1:6,]
data22 <- data2[7:12,]
data31 <- data3[1:6,]
data32 <- data3[7:12,]
...etc

data01用
paste()
组合变量名,然后按照您的建议使用
get()
assign()

for (i in 1:10) {
  datai <- get(paste('data', i, sep = ''))
  assign(paste('data', i, '1', sep = ''), datai[1:6,])
  assign(paste('data', i, '2', sep = ''), datai[7:12,])
}
for(1:10中的i){

datai这里有一种比使用
assign
更像R的方法:

data1 <- data0 <- data.frame(x = 1:12, y = letters[1:12]) #some data

mylist <- mget(ls(pattern = "data\\d")) #collect free floating objects into list
#it would be better to put the data.frames into a list when you create them

res <- lapply(mylist, function(d) split(d[1:12,], rep(1:2, each = 6))) #loop over list and split each data.frame

学习使用列表收集相关数据。在列表元素上进行迭代要容易得多。@Roland qdread的解决方案奏效了,所以我将同时使用它(最后期限即将到来)。将在将来查看列表,因此感谢您的建议!不,不要使用它。下一步将更加困难。另请参阅。这非常有效!无法找到如何使这些索引([1:6,])正常工作,因为已将它们包含在粘贴()中不起作用。首先检索变量可解决此问题,并将其设置为占位符。不,这是一种不好的做法,比实际需要的更困难。只需使用列表。同意这不是最佳做法,但它可以说明如何获得所需的结果。
data1 <- data0 <- data.frame(x = 1:12, y = letters[1:12]) #some data

mylist <- mget(ls(pattern = "data\\d")) #collect free floating objects into list
#it would be better to put the data.frames into a list when you create them

res <- lapply(mylist, function(d) split(d[1:12,], rep(1:2, each = 6))) #loop over list and split each data.frame
res[["data1"]][["2"]]
#    x y
#7   7 g
#8   8 h
#9   9 i
#10 10 j
#11 11 k
#12 12 l