首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据文件名创建列

根据文件名创建列
EN

Stack Overflow用户
提问于 2017-04-04 15:34:13
回答 2查看 2.8K关注 0票数 2

我有数千个文件,我需要这样做,所以我试图避免手动处理每个文件。这些文件中唯一的标识特征是文件名,因此我需要根据文件名创建一个列,以便在以后合并文件时能够识别它们。文件名包含占位符,然后是船名,然后是由下划线分隔的净编号。我的数据如下:

文件名= 3_Whip_1.1.csv (Boat = Whip,Net = 1.1)

代码语言:javascript
复制
Time     Pred
11:00    10.2
12:00    8.4
13:00    9.6

我想让这些数据看起来像这样:

代码语言:javascript
复制
Boat    Net    Time     Pred
Whip    1.1    11:00    10.2
Whip    1.1    12:00    8.4
Whip    1.1    13:00    9.6

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-04 15:38:20

我们可以使用gsub返回“文件名”的一个子字符串,并将其分割为带有read.tablecbind的两列,并带有原始数据。

代码语言:javascript
复制
d1 <- read.table(text=gsub("^\\d+_|\\.[^.]+$", "", filename),
         sep="_", col.names = c("Boat", "Net"))
cbind(d1, dat1)
#   Boat Net  Time Pred
#1 Whip 1.1 11:00 10.2
#2 Whip 1.1 12:00  8.4
#3 Whip 1.1 13:00  9.6

数据

代码语言:javascript
复制
dat1 <- structure(list(Time = c("11:00", "12:00", "13:00"), Pred = c(10.2, 
 8.4, 9.6)), .Names = c("Time", "Pred"), class = "data.frame", row.names = c(NA, 
-3L))

filename <- "3_Whip_1.1.csv"
票数 1
EN

Stack Overflow用户

发布于 2017-04-04 15:50:42

下面的代码将适用于一个数据框架。您可能会创建一个函数来包含这些操作,并遍历(或使用apply家族函数)一个向量或文件名列表。list.files函数可以在一个目录中显示所有文件名,这对您的工作非常有用。

代码语言:javascript
复制
# Create the example filename
filename <- "3_Whip_1.1.csv"

# Create example data frame
dat1 <- data.frame(Time = c("11:00", "12:00", "13:00"),
                 Pred = c(10.2, 8.4, 9.6),
                 stringsAsFactors = FALSE)

# Remove ".csv"
filename2 <- sub(".csv", "", filename)

# Split the string by "_"
filename_vec <- strsplit(filename2, split = "_")[[1]]

# Create columns to store the information
dat1$Boat <- filename_vec[2]
dat1$Net <- filename_vec[3]

# Change column order
dat1 <- dat1[, c("Boat", "Net", "Time", "Pred")]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43211651

复制
相关文章

相似问题

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