我有一个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)
当我手动逐列运行时,工作正常。
我做错了什么?
答案 0 :(得分:1)
记录 - 回答你做错了什么的问题:
for (j in length(List))
应该是
for (j in 1:length(List))
答案 1 :(得分:0)
假设下面是向量
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)
}