ここで SO に関する多くの関連する質問があることは知っていますが、関数の適用リストや cbind/rbdind からではなく、purrr ソリューションを探しています (この機会に purrr をよりよく知りたいと思います)。
データフレームのリストがあり、リスト内の各データフレームに新しい列を追加したいと考えています。列の値は、データフレームの名前、つまりリスト内の各要素の名前になります。
ここに似たようなものがありますが、関数 and の使用を伴いますが、mutate_each()
必要なのは だけmutate()
です。
リスト ( と呼ばれる) を理解するために、最初の要素のcomentarios
最初の行を次に示します。str()
> str(comentarios[1])
List of 1
$ 166860353356903_661400323902901:'data.frame': 13 obs. of 7 variables:
したがって166860353356903_661400323902901
、各データフレームの ID として、新しい変数に結果の 13 行を含めるようにします。
私がしようとしているのは:
dff <- map_df(comentarios,
~ mutate(ID = names(comentarios)),
.id = "Group"
)
ただし、mutate()
機能するにはデータフレームの名前が必要です。
Error in mutate_(.data, .dots = lazyeval::lazy_dots(...)) :
argument ".data" is missing, with no default
それぞれの名前を入れるのは意味がありません。ループの領域に迷い込んで、purrr (およびより一般的には R) の利点を失うことになります。リストが小さければ を使用しますreshape::merge_all()
が、2000 を超える要素があります。助けてくれてありがとう。
編集:アリスターのコメントに従って、問題を再現可能にするためのいくつかのデータ
# install.packages("tidyverse")
library(tidyverse)
df <- data_frame(one = rep("hey", 10), two = seq(1:10), etc = "etc")
list_df <- list(df, df, df, df, df)
names(list_df) <- c("first", "second", "third", "fourth", "fifth")
dfs <- map_df(list_df,
~ mutate(id = names(list_df)),
.id = "Group"
)