2017-01-20 18 views
-2

リスト内に5つのデータセット(それぞれdf_1df_2など)があり、それぞれがconsという変数があるとします。リスト内の各データセットでcons以上の関数を実行し、その名前に対応するデータセットの接尾辞が付いた新しい変数を作成したいと思います。r:lapplyだが動的な名前付け

df_1には、cons_1という名前の変数があり、df_2にはcons_2という変数があります。私が遭遇する問題は、変数のループと動的な名前の作成です。

提案がありますか?

+0

でそれらを追加することができます。もっと具体的な例がなければ誰もより具体的なアイデアを提供することはできません。 – Frank

+0

再現可能な例はありませんが、私は正確な答えを提供することはできませんが、このようなものは動作します: 'myList < - lapplyseq_along(myList)、function(i)within(myList [[i]] [[paste0(" cons_ " 、i)]] < - somestuff(cons)})) '。 – lmo

答えて

1

これは実際には非常に簡単です:

df_names <- paste("df", 1:5, sep = "_") 
cons_names <- paste("cons", 1:5, sep = "_") 

for (i in 1:5) { 
    # get the df from the current env by name 
    df_i <- get(df_names[i]) 
    # do whatever you need to do and assign the result 
    df_i[[cons_names[i]]] <- some_operation(df_i) 
} 

しかし、それは大ざっぱすることができgetを、使用しないように、リストにあなたのデータフレームを維持するために、より理にかなって:

使用
for (i in 1:5) { 
    df_i[[cons_names[i]]] <- some_operation(df_list[[i]]) 
} 
+0

結果の変数にはそれぞれ異なる名前が必要です。私のデータセットは本質的に同じ100人の5つの異なる映画を評価しており、データは幅広ではなく積み重ねられています。 – vashts85

+0

@ vashts85私はあなたの質問を誤解しています。私は明確にします。しかし、私はまだあなたがリスト内のすべてのデータフレームを持つことができない理由を理解していません。 – shadowtalker

+0

@ vashts85再現可能な入力と出力を持つ具体的な例を作成し、そのような誤解を避けるために質問に追加する必要があります。 – Frank

0

これは代替ソリューションになります。

library(purrr) 
lst <- list(mtcars_1 = mtcars, 
      mtcars_2 = mtcars, 
      mtcars_3 = mtcars, 
      mtcars_4 = mtcars, 
      mtcars_5 = mtcars) 

map(seq_along(lst), function(x) { 
lst[[x]][paste0("mpg_", x)] <- some_operation(lst[[x]]['mpg']); lst[[x]] 
}) 

S ubsetリストから各データフレームを作成し、現在のデータフレームのインデックスで新しいmpg変数を作成し、mpg変数で必要な操作を実行します。結果は、各データフレームの新しい変数を含むすべてのデータ前のデータフレームを含むリストです。

この新しいリストは、データフレームの名前を持っていないので、あなたは常にちょうど私の提案は、最初のステップとして、 `` do.call(rbind、List_o_DFs)となりsetNames(newlist, names(lst))

関連する問題