2017-10-06 12 views
1

通常はPythonでコーディングしていますが、私はこの問題に苦労しています。各データフレームにn行以上がある場合、データフレームリストにデータフレームを追加するためのRループ

私は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がnullであるように思われるが、私はなぜ知らない((i)を取得する)です。

ありがとうございました。

+0

を。 –

+0

返信ありがとうございますが、dataframe_name <-names(eapply(.GlobalEnv、is.data.frame))の名前をとっています。その名前にはそれぞれオブジェクトがあると思います。 –

+0

これには非データフレームも含まれます。あなたは '名前(sapply(.GlobalEnv、is.data.frame))[サプリー(.GlobalEnv、is.data.frame)]'のようなものが必要です(私は確信しているでしょう!) –

答えて

1

次のRコード試すことができます:あなたのデータフレーム( `x1`など)のいずれかが存在しないかのように見えます

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素晴らしい解決策、話してくれてありがとう! –

関連する問題