簡體   English   中英

如何在R數據幀中的列之間循環並在每次迭代中使用列名創建新的數據幀?

[英]How to loop through the columns in an R data frame and create a new data frame using the column name in each iteration?

我有一個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:

i  A  
1  4 
2 13  
3  1   
4  3 

和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)

當我手動逐列運行它時,效果很好。

我究竟做錯了什么?

作記錄-回答您做錯了什么問題:

for (j in length(List))

應該是

for (j in 1:length(List))

假設這些是向量

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)

所有i,A,B,C,D的數據幀

MM <- cbind(i,A,B,C,D)
MM <- data.frame(MM)

List <- colnames(MM)
List <- List [-1]

創建特定數據幀df1,df2,df3和df4的功能

for (j in 1:length(List)) {

df <- data.frame(MM$i,MM[,List[j]]) colnames(df) <- c("i", paste("df",List[j], sep = "")) assign(paste("df",j, sep = ""),df) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM