2017-10-06 58 views
1

我通常使用python編寫代碼,我正在努力解決這個問題。用於在數據幀列表中添加數據幀的R循環(如果每個數據幀具有多於n行的數據)

我有一個名爲dataframe_name的數據框名稱列表,我想用這個列表來調用一些數據框對象。 之後,我想要使用if循環來拾取行數等於34的數據框,並列出它們以創建數據框對象列表。

dataframe_name<-c("x1","x2","x3","x4","x5","x6","x7") 
dataframe_list<-list() 

for(i in dataframe_name){ 
    if(nrow(get(i))==34){ 
    append(get(i),dataframe_list) 
    } 
} 

當我運行該腳本,我得到這個錯誤:

Error in if (nrow(get(i)) == 34) { : argument is of length zero 

我所瞭解的是,nrow(獲得(I))似乎是空,但我不知道爲什麼。

感謝您的任何幫助。

+0

這看起來好像你dataframes之一('x1'等)不存在。 –

+0

感謝您的回覆,但我已經採用dataframe_name <名稱(eapply(.GlobalEnv,is.data.frame))的名稱,那麼我認爲所有名稱都有相應的對象 –

+0

這也將包括非數據框。你需要像'names(sapply(.GlobalEnv,is.data.frame))[sapply(.GlobalEnv,is.data.frame)]'(我確定必須有一個更好的方法! –

回答

1

您可以嘗試下列R-代碼:

dataframe_name<-c("x1","x2","x3") 
x1 <- data.frame(a=c(1, 2)) 
x2 <- data.frame(a=c(1, 2)) 
x3 <- data.frame(a=rep(1, 34)) 
dataframe_list<-list() 

for(i in seq_along(dataframe_name)){ #note the different syntax for for loops in R 
    if(nrow(get(dataframe_name[i]))==34){ 
    dataframe_list[[dataframe_name[i]]] <- get(dataframe_name[i]) #new element of the list by the original name of the dataframe 
    } 
} 
+1

或過濾器(函數(x)nrow(x)== 34,mget(dataframe_name))' – Frank

+1

@Frank偉大的解決方案,謝謝你的發言! –