从R中的文件名中提取变量

问题描述 投票:1回答:2

我有包含多行的文件,我想通过从文件名中提取变量并将它们乘以当前行来添加我创建的两个新行。例如,我有一堆文件的名称如下:

file1[1000,1001].txt

file1[2000,1001].txt

[]之间,总是有两个数字,用逗号分隔

文件本身具有多列,例如column1column2

我想为每个文件提取文件名中的2个值,然后将它们用作变量以创建2个新列,并使用该变量来修改值。

例如

file1[1000,2000]

文件包含两列

column1    column2
1             2
2             4

我想最后将第一个文件名值添加到第1列以创建column3,然后将第二个文件名值添加到第2列以创建第4列,最后得到类似这样的内容

column1  column2 column3 column4
1            2     1001     2002
2            4     1002     2004

感谢您的帮助。我几乎只有几个问题原始文件有2列“ X_Parameter”“ Y_Parameter”,文件名为“ test(64084,4224).txt”您的代码非常适合从文件名中提取两个值V1“ 64084”和V2“ 4224”。然后,我将这些值添加到原始数据集中。这将产生4列。 “ X_Parameter”“ Y_Parameter”“ V1”“ V2”。

setwd("~/Desktop/txt/")
txt_names = list.files(pattern = ".txt")
for (i in 1:length(txt_names)){assign(txt_names[i], read.delim(txt_names[i]))
DS1 <- read.delim(file = txt_names[i], header = TRUE, stringsAsFactors = TRUE)
require(stringr)
remove_text <- str_extract(txt_names, pattern = "\\[[0-9,0-9]+\\]")
step1 <- gsub("(\\[)", "", remove_text)
step2 <- gsub("(\\])", "", step1)
DS2<-as.data.frame(do.call("rbind", (str_split(step2, ","))))
DS1$V1<-DS2$V1
DS1$V2<-DS2$V2

我的问题是,对每一行都加总和“ X_Parameter”和“ V1”以得出“ absoluteX”,总和“ Y_Parameter”和“ V2”以使“ absoluteY”。

以下是我尝试过的两种错误处理方法

DS1$absoluteX<-DS1$X_Parameter+DS1$V1

错误在Ops.factor(DS1 $ X_Parameter,DS1 $ V1)中:“ +”对因子没有意义

其他尝试是

DS1$absoluteX<-rowSums(DS1[,c(“X_Parameter”,”V1”)])

错误rowSums(DS1 [,c(“ X_Parameter”,“ V1”)])中的错误:“ x”必须为数字

我尝试使用

as.numeric(DS1$V1) 

导致所有值变为1

有什么想法吗?谢谢

我有包含多行的文件,我想通过从文件名中提取变量并将它们乘以当前行来添加我创建的两个新行。例如,我有一堆文件...

r variables filenames
2个回答
0
投票
## set path to wherever your files are
setwd("path")

## make a vector with names of your files
txt_names <- list.files(pattern = ".txt") # use this to make a complete list of names



## read your files in
for (i in 1:length(txt_names)) assign(txt_names[i], read.csv(txt_names[i], sep = "whatever your separator is"))


## for now I'm making a dummy vector and data frame
txt_names <- c("[1000,2000]")
ds1 <- data.frame(column1 = c(1,2), column2 = c(2,4))


## grab the text you require from the file names
require(stringr)

remove_text <- str_extract(txt_names, pattern = "\\[[0-9,0-9]+\\]")
step1 <- gsub("(\\[)", "", remove_text)
step2 <- gsub("(\\])", "", step1)

## step2 should look like this
> step2

[1] "1000,1001"

## split each string and convert to data frame with two columns 
ds2 <- as.data.frame(do.call("rbind", (str_split(step2, ","))))

## cbind with the file
df <- cbind(ds1, ds2)

## coerce factor columns to numeric
df$V1 <- as.numeric(as.character(df$V1))
df$V2 <- as.numeric(as.character(df$V2))

## perform the operation to change the columns

df$V1 <- df$column1 + df$V1
df$V2 <- df$column2 + df$V2

2
投票

您可以按照以下方式从文件名的向量中提取数字(不确定它是不是最短的代码,但是似乎可以使用)

© www.soinside.com 2019 - 2024. All rights reserved.