リスト内に5つのデータセット(それぞれdf_1
、df_2
など)があり、それぞれがcons
という変数があるとします。リスト内の各データセットでcons
以上の関数を実行し、その名前に対応するデータセットの接尾辞が付いた新しい変数を作成したいと思います。r:lapplyだが動的な名前付け
df_1
には、cons_1
という名前の変数があり、df_2
にはcons_2
という変数があります。私が遭遇する問題は、変数のループと動的な名前の作成です。
提案がありますか?
リスト内に5つのデータセット(それぞれdf_1
、df_2
など)があり、それぞれがcons
という変数があるとします。リスト内の各データセットでcons
以上の関数を実行し、その名前に対応するデータセットの接尾辞が付いた新しい変数を作成したいと思います。r:lapplyだが動的な名前付け
df_1
には、cons_1
という名前の変数があり、df_2
にはcons_2
という変数があります。私が遭遇する問題は、変数のループと動的な名前の作成です。
提案がありますか?
これは実際には非常に簡単です:
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]])
}
結果の変数にはそれぞれ異なる名前が必要です。私のデータセットは本質的に同じ100人の5つの異なる映画を評価しており、データは幅広ではなく積み重ねられています。 – vashts85
@ vashts85私はあなたの質問を誤解しています。私は明確にします。しかし、私はまだあなたがリスト内のすべてのデータフレームを持つことができない理由を理解していません。 – shadowtalker
@ vashts85再現可能な入力と出力を持つ具体的な例を作成し、そのような誤解を避けるために質問に追加する必要があります。 – Frank
これは代替ソリューションになります。
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))
でそれらを追加することができます。もっと具体的な例がなければ誰もより具体的なアイデアを提供することはできません。 – Frank
再現可能な例はありませんが、私は正確な答えを提供することはできませんが、このようなものは動作します: 'myList < - lapplyseq_along(myList)、function(i)within(myList [[i]] [[paste0(" cons_ " 、i)]] < - somestuff(cons)})) '。 – lmo