如何循环遍历R数据帧中的列,并在每次迭代中使用列名创建新的数据帧?

如何循环遍历R数据帧中的列,并在每次迭代中使用列名创建新的数据帧?,r,for-loop,dataframe,R,For Loop,Dataframe,我有一个R数据帧dftotal i A B C D 1 4 15 4 12 2 13 4 4 7 3 1 1 3 8 4 3 11 1 9 我想写一个循环,它遍历a、B、C、D列,每次都创建一个新的数据帧,这样我就可以为每列创建一个数据帧: dfA: 和dfB: i B 1 15 2 4 3 1 4 11 等等 我试过: List <- colnames(dftotal) List <- List[-1] for (j in leng

我有一个R数据帧dftotal

i  A  B C  D
1  4 15 4 12
2 13  4 4  7 
3  1  1 3  8 
4  3 11 1  9 
我想写一个循环,它遍历a、B、C、D列,每次都创建一个新的数据帧,这样我就可以为每列创建一个数据帧:

dfA:

和dfB:

i  B 
1 15 
2  4 
3  1  
4 11 
等等

我试过:

List <- colnames(dftotal)
List <- List[-1]
for (j in length(List)) 
    {
      df <- data.frame(dftotal$i,dftotal[List[j]]) 
      assign(paste("df",List[j]), df)

    }
但这只返回了列表中最后一列的数据帧。它似乎覆盖了在循环中创建的其他数据帧

df <- data.frame(dftotal$i,dftotal[List[1]]) 
      assign(paste("df",List[1]), df)
当我手动逐列运行它时,效果很好


我做错了什么

记录在案-回答你做错了什么的问题:

对于长项选手j

宁可

为j在1:lengthList

假设下面这些是向量


df Try lapplydf[-1],functionicbinddf$i,ior lapplysapplyiris,functionx data.framex,cbind@Sotos在循环内部或外部?不要将单独的data.frames分配到全局环境中。将它们放在一个列表中,就像前面的注释所示。循环中没有任何地方。靠它自己谢谢。我现在也明白了为什么这是个坏主意:-
df <- data.frame(dftotal$i,dftotal[List[1]]) 
      assign(paste("df",List[1]), df)
i <- c(1,2,3,4)
A <- c(4,13,1,3)
B <- c(15,4,1,11)
C <- c(4,4,3,1)
D <- c(12,7,8,9)
MM <- cbind(i,A,B,C,D)
MM <- data.frame(MM)

List <- colnames(MM)
List <- List [-1]
for (j in 1:length(List)) {