14

ここで 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"
              )
4

2 に答える 2