首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将CSV导入R时,如何生成带有CSV名称的列?

将CSV导入R时,如何生成带有CSV名称的列?
EN

Stack Overflow用户
提问于 2011-03-04 05:08:44
回答 3查看 15.7K关注 0票数 20

我有大量想要读入R的csv文件。csv中的所有列标题都是相同的。起初,我认为我需要根据文件名列表创建一个循环,但在搜索之后,我发现了一种更快的方法。这会正确地读入并组合所有的csvs (据我所知)。

代码语言:javascript
复制
filenames <- list.files(path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, recursive = FALSE, ignore.case = FALSE)

library(plyr)
import.list <- llply(filenames, read.csv)

combined <- do.call("rbind", import.list)

唯一的问题是,我想知道特定数据行来自哪个csv。我想要一个标记为'source‘的列,它包含来自特定行的csv的名称。例如,如果csv名为Chicago_IL.csv,当数据进入R时,行将如下所示:

代码语言:javascript
复制
> City    State   Market  etc Source  
> Burbank IL      Western etc Chicago_IL
EN

回答 3

Stack Overflow用户

发布于 2011-03-04 05:48:12

试试这个:

代码语言:javascript
复制
do.call("rbind", sapply(filenames, read.csv, simplify = FALSE))

行名将指示来源和行号。

票数 15
EN

Stack Overflow用户

发布于 2011-03-04 05:19:34

有点乱七八糟,但很管用:

代码语言:javascript
复制
filenames <- c("foo.csv","bar.csv")
import.list <- list(matrix(,4,4),matrix(6,6))

source <- unlist(sapply(1:length(filenames),function(i)rep(gsub(".csv","",filenames[i]),nrow(import.list[[i]]))))

source
[1] "foo" "foo" "foo" "foo" "bar" "bar" "bar" "bar" "bar" "bar"

combined$source <- source
票数 1
EN

Stack Overflow用户

发布于 2018-04-23 19:30:53

我发现这是一个工作,它创建新的列和合并整个文件夹的csv文件。

使用setNames():

代码语言:javascript
复制
file.list <- list.files(pattern = '*.csv')
file.list <- setNames(file.list, file.list)

df.list <- lapply(file.list, read_csv)
df.list <- Map(function(df, name) {
  df$issue <- name
  df
}, df.list, names(df.list))
df <- rbindlist(df.list,use.names = TRUE, fill = TRUE, idcol = "Issue")

这一行创建源文件的新列,并将它们合并。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5186570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档