Добавление столбцов из фрейма данных rowwis в команду do

#r #dplyr

#r #dplyr

Вопрос:

У меня есть data.frame с именами файлов, и я планирую прочитать каждый, data.frame чтобы получить один огромный data.frame , но я хочу иметь дополнительный столбец с именами файлов.

Что я делаю, так это rowwise просматриваю data.frame и использую do для чтения файла, и я пытаюсь присоединить столбцы с помощью mutate .

 df <- data.frame(a=c('file1.txt','file2.txt'), 
                 b=LETTERS[1:2], 
                 stringsAsFactors=FALSE)
write.table(data.frame(c=runif(5), d=runif(5)), 
            'file1.txt', sep='t', row.names=F)
write.table(data.frame(c=runif(5), d=runif(5)), 
            'file2.txt', sep='t', row.names=F)
df %>%
  rowwise() %>%
  do(
    read.delim(.$a, stringsAsFactors=FALSE) %>%
      mutate(A=.$a,
             B=.$b)
  )
  

По какой-то причине прикрепленные столбцы не rowwise прикреплены, как я ожидал.

Есть ли решение, делающее это таким образом?

Редактировать

Благодаря ответу @Matteos, с вложенностью это работает как шарм! Теперь я могу четко видеть, из какого файла берутся строки.

 df %>%
  rowwise() %>%
  mutate(x=list(read.delim(a, stringsAsFactors=FALSE))) %>%
  tidyr::unnest(x)
  

Комментарии:

1. Приведите пример фрейма данных, содержащего имена файлов.

2. Я думаю, было бы легче понять, отличаются ли ваши file1.txt и file2.txt от df . Не могли бы вы обновить свой пример и показать ожидаемый результат для него?

3. Файлы разные, я просто хотел создать минимальный пример и использовал тот же фрейм данных.

Ответ №1:

Попробуйте использовать nest и unnest , даже если мне не совсем понятно, чего вы пытаетесь достичь. Например:

 nested_out <- df %>%
              rowwise() %>%
              mutate(
                x = list(read.delim(a, stringsAsFactors=FALSE) %>%
                         mutate(A=a,
                                B=b)
                        )
              )
  

и затем, когда вы это сделаете unnest(nested_out) , вы получите:

 # A tibble: 4 x 6
  a         b     a1        b1    A         B
  <chr>     <chr> <chr>     <chr> <chr>     <chr>
1 file1.txt A     file1.txt A     file1.txt A
2 file1.txt A     file2.txt B     file2.txt B
3 file2.txt B     file1.txt A     file1.txt A
4 file2.txt B     file2.txt B     file2.txt B
  

Комментарии:

1. Это действительно очень помогает! таким образом, мне не нужно добавлять столбцы, поскольку столбцы a и b все еще существуют, и теперь я могу видеть, откуда берутся строки…. Я обновил свой вопрос, чтобы включить ваш ответ.