2016-12-08 21 views
0

私はRを学習しています。たとえば、各データフレームごとにコードを入力することなく、各データフレームに表示される変数を記録するなど、複数のデータフレームにわたって同じデータ変換を行う方法を探していました。データフレームのリストを作成し、lapply()を使用してそれらをすべて1つの関数に変換しましたが、結果は新しいリストに保存されました。これらのリスト要素のそれぞれを独自のデータフレームに抽出し、元のものと同じ方法で名前を付けることができるようにしたいと考えています。誰もそれを行う方法を知っていますか?ここで変換後のリストから個々のデータフレームを抽出する(lapply)?

は、いくつかのサンプルコードです:

testlist<-list(FY2012First,FY2012Last) 

testlist<-lapply(testlist, function(q) { 
     q<-mutate(q, 
      YearsofServiceCat = 
       ifelse(YearsatAgency<=2, "0-2", 
       ifelse(YearsatAgency>=3 & YearsatAgency<=5,"3-5", 
       ifelse(YearsatAgency>=6 & YearsatAgency<=8,"6-8", 
       ifelse(YearsatAgency>=9,"9 or greater", 
        "Unknown"))))))} 

これは私がしたいように更新各要素で新しいリストを与えるが、今私は戻って、個々の「FY2012First」という名前のデータフレームと「FY2012Lastにそれらの要素を取得したいです"私は個別にそれを行うために、これを使用:

FY2012FirstNew<-as.data.frame(list["FY2012First"]) 

しかし、FY2012FirstNewで、各変数は、「今すぐ「(変数名)FY2012Firstを。」と命名され、そして私は、彼らは単に名前を付ける必要があり、ことを望んでいない(変数名)。"

質問は本当に2つです。それらのデータフレームを抽出する良い方法はありますか?名前を変えることなくそれを行う方法はありますか?そこより良い方法は、おそらくですが、私は、forループを使用する

+1

あなたは最小限の例を追加することを検討可能性がある、図1(a =リスト(リスト 'のために何かを言います: 2)、b =リスト(4:5)) 'である。おそらく、関数の読み込みに必要なライブラリ呼び出しを含めるべきです。 –

+0

おそらく 'ifelse'文を' cut'で取り除くことができます。例えばmutate(YearsOfServiceCat = cut(YearsatAgency、c(0,3,6,9,100)、c( "0-2"、 "3-5"、 "6-8"、 "9 +"))) ' –

+0

うわー、私はカット機能について知りませんでした、それは事をはるかに簡単にする、ありがとう! – maccorf

答えて

0

for (i in 1:length(testlist)) { 
    assign(names(testlist)[i], testlist[[i]]) 
} 
1
data(iris) 
data(mtcars) 
iris2 = iris 
mtcars2 = mtcars 
testlist = list(iris2 = iris, mtcars2 = mtcars) 

testlist = lapply(testlist, function(dfs){ 
    dfs$new_col = 1 
    dfs 
}) 

# datasets are unchanged 
str(iris2) 
str(mtcars2) 
rm(list = names(testlist)) 
list2env(testlist, baseenv()) 
# datasets are updated 
str(iris2) 
str(mtcars2) 
+0

これが何であるか分かりませんが、私はそれから何の結果も得ていませんでした:( – maccorf

+0

@maccorf 'list2env'は既存の変数を上書きしないようです。 –

関連する問題