2014-04-01 145 views
0

我想通過一些對象循環來執行一些子集在每個對象中的數據框。而且,在每年的數據框內我都會進行子集化。我正在使用帶有數據幀名稱的字符向量將數據傳遞到循環中,然後使用assign()將其傳回給字符名稱。問題在於,循環在分配時不會將任何行返回到數據幀。這裏是代碼:for循環返回0行數據幀

dfs <- c('df.one', 'df.two', 'df.three', etc.) 
year <- NULL; 
for (i in 1:length(dfs)) { 
    data <- get(dfs[i]); 
    for (j in unique(data$year)) { 
     yr <- data[data$year==unique(data$year)[j],] 
     yr <- subset(yr, snowmelt.date <= sampling.date) 
     year <- rbind(year, yr) 
    } 
    assign(dfs[i], year) 
}   

其他方法的任何想法或想法將不勝感激!謝謝你的幫助。

比率

P.請讓我知道,如果一個實際可重複的例子將有助於這一點。我只是認爲有人可以通過查看代碼來挑選某些東西。

+0

有更好的方法來做到這一點,但作爲一個開始,對於子集多年,試試這個'年< - 數據[數據$ year == j,]'j的值是unique(data $ year)',並且不是索引。 – infominer

+0

謝謝,infominer。你介意讓我介紹一些更好的方法來做到這一點? – logicForPresident

+1

一個可重複的例子會有所幫助,或許你的一個數據框中的'dput'將'dput(df.one)'的輸出粘貼到問題中 – infominer

回答

0

太長的評論。

首先,在你的內部循環您的J個到年序列:

for (j in unique(data$year)) ... 

那麼在你使用J所示的指數循環的第一行(行號...):

yr <- data[data$year==unique(data$year)[j],] 

因此,如果年份是2012年,那麼您正在嘗試查找2012年的唯一年份向量行。可能沒有2012行,所以條件失敗,結果中沒有行。試試這個:

yr <- data[data$year==j,] 

其次,我沒有看到內部循環的開始點。它看起來像snowmelt.datesampling.datedata的列。你似乎想在那裏snowmelt.date <= sampling.date所有年份,所以爲什麼不使用行:

for (i in 1:length(dfs)) { 
    data <- get(dfs[i]); 
    year <- data[data$snowmelt.date <= data$sampling$date,] 
    assign(dfs[i], year) 
}