我有一个像这样的数据框架,我用" bicho"在列表中:
row.names bicho freq date ndvi date2 ndvi2 date3 ndvi3 ...
1 john 3 2009-04-08 5001 2009-04-23 4537 2009-05-09 3540
1.1 john 3 2009-04-08 5001 2009-04-23 4537 2009-05-09 3540
1.2 john 3 2009-04-08 5001 2009-04-23 4537 2009-05-09 3540
... ... . ... .. ... .. ... .. ...
2 steve 4 2010-04-29 6338 2010-05-09 5145 2010-05-25 3318
2.1 steve 4 2010-04-29 6338 2010-05-09 5145 2010-05-25 3318
2.2 steve 4 2010-04-29 6338 2010-05-09 5145 2010-05-25 3318
2.3 steve 4 2010-04-29 6338 2010-05-09 5145 2010-05-25 3318
列表示例:
$ john:'data.frame': 14 obs. of 152 variables:
..$ bicho : Factor w/ 26 levels "john","john",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ freq : num [1:14] 14 14 14 14 14 14 14 14 14 14 ...
..$ date : Date[1:14], format: "2009-04-08" "2009-04-08" ...
..$ ndvi : num [1:14] 5001 5001 5001 5001 5001 ...
..$ date2 : chr [1:14] "2009-04-23" "2009-04-23" "2009-04-23" "2009-04-23" ...
..$ ndvi2 : num [1:14] 4538 4538 4538 4538 4538 ...
..$ date3 : chr [1:14] "2009-05-09" "2009-05-09" "2009-05-09" "2009-05-09" ...
..$ ndvi3 : num [1:14] 3540 3540 3540 3540 3540 ...
该列表包含26个元素,每个元素与上面的元素类似。 我的目标是用一个数据框填充其中的所有元素,但是我想在其中进行一些新的列计算。最终的data.frame应如下所示:
row.names bicho freq time1 time2 ndvi
1 john 3 0 (date2-date1) 5001
1.1 john 3 (date2-date1) (date3-date2) 4537
1.2 john 3 (date3-date2) (date4-date3) 3540
... ... . ... ... ..
2 steve 4 0 (date2-date1) 6338
2.1 steve 4 (date2-date1) (date3-date2) 5145
2.2 steve 4 (date3-date2) (date4-date3) 3318
2.3 steve 4 (date4-date3) (date5-date4) 1239
我的初始代码如下所示。问题是我想逐行填充最终的data.frame(1:563),列表元素的长度可变,但我找不到办法。
for(b in list){
for(j in seq_along(df$bicho){
for(i in seq_along(b$bicho)){
print(i)
if(i==1){
df$tempo1[j]=0
df$tempo2[j]=as.Date(b$date2[i])-b$date[i]
df$NDVI<-b[i,4]
df$tempo1[j+1]=df$tempo2[j]
}}}}
此代码的目标是仅填充每个变量的第一行。
答案 0 :(得分:0)
如何首先填充数据?
## make toy lists
ll1 <- list(bicho=rep("a",3),frep=rep(3,3),x=1:3,y=7:9)
ll2 <- list(bicho=rep("b",5),frep=rep(4,5),x=1:5,y=6:10)
## fill
ret <- c()
your.list.of.list <- list(ll1,ll2)
for (e in your.list.of.list){
ret <- rbind(ret,do.call(cbind,e))
}
ret <- data.frame(ret,stringsAsFactors=FALSE)
然后您可以按列计算添加任何其他列
ret$z <- as.numeric(ret$y)-as.numeric(ret$x)
ret
> ret
bicho frep x y z
1 a 3 1 7 6
2 a 3 2 8 6
3 a 3 3 9 6
4 b 4 1 6 5
5 b 4 2 7 5
6 b 4 3 8 5
7 b 4 4 9 5
8 b 4 5 10 5
>