我有成千上万的文件需要这样做,所以我试图避免为每个文件手动执行此操作。这些文件中唯一的识别特征是文件名,因此我需要根据文件名创建一个列,以便以后合并文件时可以识别它们。文件名包含占位符,然后是船名,然后是由下划线分隔的网络号。我的数据如下:
文件名= 3_Whip_1.1.csv(船=鞭子,净= 1.1)
Time Pred
11:00 10.2
12:00 8.4
13:00 9.6
我想让数据看起来像这样:
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
非常感谢任何帮助。
答案 0 :(得分:1)
我们可以使用gsub
返回'文件名'的子字符串。并使用原始数据
read.table
和cbind
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
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 :(得分:1)
以下代码适用于一个数据框。您可能可以创建一个函数来包含这些操作,并循环(或使用apply
族函数)向量或文件名列表。 list.files
函数可以在一个目录中显示所有文件名,这对您的工作很有用。
# 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")]