r - 如何在R的列中插入文件名
问题描述
假设,我有这样的文件
rock=structure(list(x1 = c(0, 0.8, 0.4, 0.3, 0.5, 1, 0.7, 0.6, 0.4,
0.4, 0.6), x2 = c(0, 1, 0.5, 0.3, 0.5, 0.5, 0.8, 0.3, 0.6, 0.8,
0.7), x3 = c(0, 0.4, 0.8, 0.4, 0.2, 1, 0.5, 0.8, 0.4, 1, 0.3),
x4 = c(0, 0.3, 0.4, 0.4, 0.5, 0.6, 0.8, 0.3, 0.7, 0.6, 0.2
)), class = "data.frame", row.names = c(NA, -11L))
rave=structure(list(x1 = c(0, 0.8, 0.4, 0.3, 0.5, 1), x2 = c(0, 1,
0.5, 0.3, 0.5, 0.5), x3 = c(0, 0.4, 0.8, 0.4, 0.2, 1), x4 = c(0,
0.3, 0.4, 0.4, 0.5, 0.6)), class = "data.frame", row.names = c(NA,
-6L))
classic=structure(list(x1 = c(0, 0.8), x2 = 0:1, x3 = c(0, 0.4), x4 = c(0,
0.3)), class = "data.frame", row.names = c(NA, -2L))
当我使用这些数据集时如何做到这一点rbind
,为每个数据集粘贴原始名称,即我希望看到这样的结果。名称为 csv 格式的初始数据。例如
classic=read.csv(path to classic.csv)
dataset x1 x2 x3 x4
1 classic 0.0 0.0 0.0 0.0
2 classic 0.8 1.0 0.4 0.3
3 Rave 0.0 0.0 0.0 0.0
4 Rave 0.8 1.0 0.4 0.3
5 Rave 0.4 0.5 0.8 0.4
6 Rave 0.3 0.3 0.4 0.4
7 Rave 0.5 0.5 0.2 0.5
8 rock 0.0 0.0 0.0 0.0
9 rock 0.8 1.0 0.4 0.3
10 rock 0.4 0.5 0.8 0.4
11 rock 0.3 0.3 0.4 0.4
12 rock 0.5 0.5 0.2 0.5
13 rock 1.0 0.5 1.0 0.6
14 rock 0.7 0.8 0.5 0.8
15 rock 0.6 0.3 0.8 0.3
16 rock 0.4 0.6 0.4 0.7
17 rock 0.4 0.8 1.0 0.6
18 rock 0.6 0.7 0.3 0.2
解决方案
将它们放在一个列表中并使用bind_rows
:
library(dplyr)
bind_rows(lst(rock, rave, classic), .id = 'dataset')
# dataset x1 x2 x3 x4
#1 rock 0.0 0.0 0.0 0.0
#2 rock 0.8 1.0 0.4 0.3
#3 rock 0.4 0.5 0.8 0.4
#4 rock 0.3 0.3 0.4 0.4
#5 rock 0.5 0.5 0.2 0.5
#6 rock 1.0 0.5 1.0 0.6
#7 rock 0.7 0.8 0.5 0.8
#8 rock 0.6 0.3 0.8 0.3
#9 rock 0.4 0.6 0.4 0.7
#10 rock 0.4 0.8 1.0 0.6
#11 rock 0.6 0.7 0.3 0.2
#12 rave 0.0 0.0 0.0 0.0
#13 rave 0.8 1.0 0.4 0.3
#14 rave 0.4 0.5 0.8 0.4
#15 rave 0.3 0.3 0.4 0.4
#16 rave 0.5 0.5 0.2 0.5
#17 rave 1.0 0.5 1.0 0.6
#18 classic 0.0 0.0 0.0 0.0
#19 classic 0.8 1.0 0.4 0.3
但是,如果您可以自动读取列表中的数据而无需先单独读取它们,那会更好。
library(dplyr)
library(purrr)
filenames <- list.files('/path/to/csv', pattern = '\\.csv', full.names = TRUE)
result <- map_df(filenames,
~read.csv(.x) %>%
mutate(dataset = tools::file_path_sans_ext(basename(.x))))
推荐阅读
- yocto - 如何在我的 bitbake 配方中包含 boost/beast/core.hpp?我使用了适用于许多 boost 库的 DEPENDS = "boost",但不是野兽
- python - 如何在 Python 中将 Unix 时间戳添加到传入的 Universal-Robots 数据中
- node.js - 将节点脚本连接到我的网站时是否需要“app.listen()”?
- ruby - 为什么在括号前有空格调用函数时,Ruby 有时会抛出错误?
- javascript - 需要一行在本机 JQuery 中工作才能转到 ANCHOR
- html - stack two columns in form vs merging on mobile
- c++ - Error: Object of abstract class type is not allowed
- c# - 如果我将变量设置为 null,原始数据会怎样?C#
- python - 如何根据用户输入的内容打印出一定数量的字母?
- python - 在测试中检查 CLI 的退出代码