循环用于创建变量的数据框

时间:2016-05-18 16:41:04

标签: r loops while-loop

我正在尝试编写一个循环来替换下面的代码。我想创建一个包含列的数据框作为下面的变量。我正在考虑使用expand.grid,但我认为我会遇到的问题是我会得到像c(NA,datadf [1:8758])这样的组合。我想要的是每次我添加另一个NA,datadf的长度减少1.我不是那么方便的循环所以任何提示都非常感激。

代码:

Av1<-c(NA,datadf[1:8759])
Av2<-c(NA,NA,datadf[1:8758])
Av3<-c(NA,NA,NA,datadf[1:8757])
Av4<-c(NA,NA,NA,NA,datadf[1:8756])
Av5<-c(NA,NA,NA,NA,NA,datadf[1:8755])
Av6<-c(NA,NA,NA,NA,NA,NA,datadf[1:8754])
Av7<-c(NA,NA,NA,NA,NA,NA,NA,datadf[1:8753])
Av8<-c(NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8752])
Av9<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8751])
Av10<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8750])
Av11<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8749])
Av12<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8748])
Av13<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8747])
Av14<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8746])
Av15<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8745])
Av16<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8744])
Av17<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8743])
Av18<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8742])
Av19<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8741])
Av20<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8740])
Av21<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8739])
Av22<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8738])
Av23<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8737])
Av24<-c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,datadf[1:8736])

数据:

> dput(datadf[1:100])
c(4, 3.83333333333333, 3.33333333333333, 4, 5, 4.5, 4.5, NA, 
5, 3.66666666666667, 3.66666666666667, 3.72727272727273, 3.44444444444444, 
3.9, 3.69230769230769, 3.66666666666667, 4.72727272727273, 3.83333333333333, 
4.375, 4, 4, 3.75, 3.8, 3.83333333333333, 5, 4.35714285714286, 
5, 5, 4.33333333333333, 4, 5, 4, 4.3125, 3.28571428571429, 4.33333333333333, 
4.125, 3.88461538461538, 3.61538461538462, 3.46153846153846, 
3.72727272727273, 4.08333333333333, 3.25, 3.83333333333333, 3.66666666666667, 
4.20833333333333, 4.14285714285714, 3.8, 4.125, 3.83333333333333, 
4.5, 3.33333333333333, 3.33333333333333, NA, 4.5, 5, 4, 4, 4.125, 
3.57142857142857, 4, 3.4, 4.33333333333333, 4.42857142857143, 
4.8125, 3.85714285714286, 3.78571428571429, 4.27272727272727, 
4.375, 3.7, 4.33333333333333, 3.75, 3.5, 3.8, 4.4, 5.16666666666667, 
4, 3.5, 5, 4, 4.83333333333333, 4.375, 4.3125, 5.125, 4.2, 4.11111111111111, 
3.91666666666667, 3.66666666666667, 3.81818181818182, 4, 4.2, 
4, 3.9, 3.42857142857143, 3.875, 3.5, 4, 4, 3, 4, 3)

2 个答案:

答案 0 :(得分:0)

你使用这样的for循环:

newdf <- data.frame(c(NA,datadf[1:8759]))
for (i in 2:8759) {
  col <- c(rep(NA,i), datadf[1:(8760-i)])
  newdf <- cbind(newdf,col)
}
colnames(newdf) <- paste0("col",1:8759)

结果:

> str(newdf)
'data.frame':   8760 obs. of  8759 variables:
 $ col1   : int  NA 1 2 3 4 5 6 7 8 9 ...
 $ col2   : int  NA NA 1 2 3 4 5 6 7 8 ...
 $ col3   : int  NA NA NA 1 2 3 4 5 6 7 ...
 $ col4   : int  NA NA NA NA 1 2 3 4 5 6 ...
 $ col5   : int  NA NA NA NA NA 1 2 3 4 5 ...
 $ col6   : int  NA NA NA NA NA NA 1 2 3 4 ...
 $ col7   : int  NA NA NA NA NA NA NA 1 2 3 ...
 $ col8   : int  NA NA NA NA NA NA NA NA 1 2 ...
 $ col9   : int  NA NA NA NA NA NA NA NA NA 1 ...
 $ col10  : int  NA NA NA NA NA NA NA NA NA NA ...

答案 1 :(得分:0)

不使用shift库中的data.table进行循环:

library(data.table)
data <- 1:100
dt <- as.data.table( shift( data, seq_along(data) ) )

给出(截断):

> str(dt)
Classes ‘data.table’ and 'data.frame':  100 obs. of  100 variables:
 $ V1  : int  NA 1 2 3 4 5 6 7 8 9 ...
 $ V2  : int  NA NA 1 2 3 4 5 6 7 8 ...
 $ V3  : int  NA NA NA 1 2 3 4 5 6 7 ...
 $ V4  : int  NA NA NA NA 1 2 3 4 5 6 ...
 $ V5  : int  NA NA NA NA NA 1 2 3 4 5 ...
 $ V6  : int  NA NA NA NA NA NA 1 2 3 4 ...
 $ V7  : int  NA NA NA NA NA NA NA 1 2 3 ...
 $ V8  : int  NA NA NA NA NA NA NA NA 1 2 ...
 $ V9  : int  NA NA NA NA NA NA NA NA NA 1 ...
 $ V10 : int  NA NA NA NA NA NA NA NA NA NA ...
 $ V11 : int  NA NA NA NA NA NA NA NA NA NA ...