2017-07-06 16 views
1

データフレームのリストがあり、特定の基準を満たすデータフレーム名を含む文字ベクトルを作成します。この場合、少なくとも1つの観測を含むデータフレームの名前が必要です。後で別の関数で使用するために、これらの名前がベクトルに必要です。データフレームのリストからデータフレーム名のベクトルを作成

データフレームのリストは、分割機能によって自動的に作成されます。

df1 <- data.frame(replicate(2,sample(0:1,5,rep=TRUE))) 
df2 <- data.frame(replicate(2,sample(0:1,5,rep=TRUE))) 
df3 <- data.frame(replicate(0,sample(0:1,5,rep=TRUE))) #empty 

mylist <- list(df1, df2,df3) #create list of data frames 

mylist2 <- mylist[sapply(mylist, function(x) dim(x)[1]) > 0] #subset list so that df's with no observations are dropped 

は今、私は必要なものmylist2におけるデータフレームの名前を持つ文字ベクトルである:再現性のために、ここではデータフレームのリストです。 (この例では「df1」と「df2」)

ありがとう!

+0

を名前でデータフレームのリストを提供する必要があります。 – Abdou

+0

ここには1つのオプション 'lapply(Filter(length、mylist)、names)' – akrun

+0

があります。https://stackoverflow.com/questions/44944307/get-the-names-of-data-frames-from-a-リスト/ 44944323#44944323 – akrun

答えて

0

あなたは、これはやや自動化したい場合は、例えば、あなたがお使いの環境でdata.framesの多数を持っている、あなたはでパターンマッチングでそれらを選択することをお勧めします1行:

mylist = do.call("list", mget(grep("df", ls(), value=T))) 
mylist2 <- mylist[sapply(mylist, function(x) dim(x)[1]) > 0] 

これは、リストの要素の属性として自分の名前を維持しながら、自分の名前に「DF」を持っているすべてのdata.framesとの最初のリストを作成します。

それから私は、1要素data.framesのためにあなたのフィルタを適用し、あなただけの名前を取得:

names(mylist2) 
#### [1] "df1" "df2" 
+1

2行目と3行目は' names(mylist)[sapply(mylist、nrow)> 0] 'に相当します。 – lmo

+0

はいありがとうございます。ユーザーのコードを再利用することもできました。 – agenis

+0

"grep"を使用したパターンマッチングが機能しました。ありがとう! – user3780463

0

名前付きリストが必要です。ここではあなたがそれを行うことができる方法である:

library(dplyr) 
library(purrr) 

mylist <- list(df1 = df1, df2 = df2, df3 = df3) 

test <- mylist %>% 
    map_int(nrow) 

test[test > 0] %>% names() 
#[1] "df1" "df2" 
+0

ありがとう!問題は250以上のデータフレームがあることです。 "df1 = df1 .... df250 = df250"と入力せずに各データフレームに名前を割り当てる簡単な方法はありますか? (これは元の質問の範囲外ですが、クイック検索では役に立たない結果が得られません) – user3780463

+0

リストが既に作成されている場合は、次のようにします: 'names(mylist)< - paste0(" df " 1L:length(mylist)) ' –

関連する問題