#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 все еще существуют, и теперь я могу видеть, откуда берутся строки…. Я обновил свой вопрос, чтобы включить ваш ответ.