r - 自动化合并数据框添加一条线以记录原点
问题描述
我是 R 的新手。我有 6 个不同的数据框(U、V、W、X、Y、Z),来自不同的 CSV 文件,每个都有相同的列(姓氏、姓名、冬季、春季、夏季),我想创建一个新的数据框,其中包含 5 行和第六行,它指示原始数据来自的字母之一(U、V、...)。我尝试过使用以下代码:
U <- read.csv(file = "U", header = T)
V <- read.csv(file = "V", header = T)
W <- read.csv(file = "W", header = T)
X <- read.csv(file = "X", header = T)
Y <- read.csv(file = "Y", header = T)
Z <- read.csv(file = "Z", header = T)
U['class'] <- rep("U")
V['class'] <- rep("V")
W['class'] <- rep("W")
X['class'] <- rep("X")
Y['class'] <- rep("Y")
Z['class'] <- rep("Z")
students <- rbind(U, V, W, X, Y, Z)
我真的需要使用一个循环,这样我以后就可以从 A 到 Z。我想做这样的事情,这完全是胡说八道。
for(class.name in list(U, V, W, X, Y, Z)){
class.name['class'] <- rep('class')
}
有没有合理的方法来做到这一点?
谢谢
已编辑
为了澄清我的问题,我的想法是我有 6 个不同的站点收集原始数据并给我 6 个不同的数据框。我想将它们合并在一起,维护原始数据来自哪个站点的信息。
可能不完整的解决方案 按照@MrFlick 的建议,我设法将所有内容放在一个列表中,如下所示
classes <- c('U', 'V', 'W', 'X', 'W', 'Z')
my.files <- paste(classes,".csv",sep="")
year.eight <- lapply(my.files, read.csv, header = T)
name(year.eight) <- classes
但是,最终结果应该是一个单独的数据框,并带有另一列以指示学生在哪个班级。有人可以帮我解决这个问题吗?
解决方案
让我尝试分享一个例子
假设我们有 3 个文件A.csv
,B.csv
并且C.csv
在我们的工作目录中名为“data”的文件夹中。假设它们包含一个带有数值的列。然后这段代码做你想做的事。
library(readr)
files <- paste0("data/", list.files("data"))
df_list <- list()
for (i in seq_along(files)) {
tmp <- read_csv(files[[i]])
tmp["class"] <- sub("\\..*", "", basename(files[[i]])) # ".csv$" also works in this case
df_list[[i]] <- tmp
}
output <- dplyr::bind_rows(df_list)
output
## A tibble: 3 x 2
# x class
# <dbl> <chr>
# 1 1 A
# 2 1 B
# 3 1 C
根据Tensibai 的出色建议进行了编辑。
推荐阅读
- ios - 如何在 GraphQLQuery 中指定我想要获取的字段
- python - 使用pygame移动矩形一直闪烁
- reactjs - 为什么 Sublime Text 3 在 React 的这一行末尾添加一个逗号?
- c++ - 在可变参数模板类中派生(虚拟)函数参数
- terraform - 使用 Terraform 引用同级目录中的 Lambda 源文件
- html - 按钮加载 react-hooks-nextjs
- json - json 日志记录中的 Fluentd 时间字段处理
- javascript - 单击复选框后按钮未打开另一个 HTML 文件
- json - 如何使用 Serilog TCP Sink 将日志事件的消息格式化为 Json
- reactjs - 如何自动将文本动态添加到图像并导出?