R 使用数据列重命名文件名

R 使用数据列重命名文件名,r,csv,apply,write.table,R,Csv,Apply,Write.table,我希望这个问题清楚可行。我有许多用简单数字ID标记的csv文件(例如,1.csv、2.csv、3.csv等)。另一个csv文件包含如下所示的实际数据 ID Site Location Block 1 L1 1 a 2 L2 2 b 3 etc 我的问题是如何链接数据文件中的ID以重命名csv文件。理想情况下,我希望的输出是L11a.csv、L22b.csv等。我认为我需要将每行观测的站点、位置和块连接到另一列中,然后将该列用作

我希望这个问题清楚可行。我有许多用简单数字ID标记的csv文件(例如,1.csv、2.csv、3.csv等)。另一个csv文件包含如下所示的实际数据

ID  Site  Location Block  
1    L1     1         a
2    L2     2         b
3 etc
我的问题是如何链接数据文件中的ID以重命名csv文件。理想情况下,我希望的输出是L11a.csv、L22b.csv等。我认为我需要将每行观测的站点、位置和块连接到另一列中,然后将该列用作write.table函数的文件名

我搜索过了,这个问题很相似,只是方向相反:


非常感谢你的帮助。这将节省我重命名文件的时间

我用四个csv文件和名为
info.txt的文件中的数据模拟了您的场景,其中包含以下内容:

"ID","Site","Location","Block"
1,"L1",1,"a"
2,"L2",2,"b"
3,"L3",3,"c"
4,"L4",4,"d"
对于此设置,如果我的理解正确,以下代码将达到您想要的效果:

x <- list.files( pattern = ".csv" )
info <- read.table( file = "info.txt", sep = ",", header = TRUE, 
                    row.names = FALSE, stringsAsFactors = FALSE )
y <- paste( info[ ,"Block" ], ".csv", sep = "" )
for( i in c( "Location", "Site" ) ) y <- paste( info[ ,i ], y, sep = "" )
file.rename( x, y )

list.files( pattern = ".csv" )
[1] "L11a.csv" "L22b.csv" "L33c.csv" "L44d.csv"

x我用四个csv文件和一个名为
info.txt的文件中的数据模拟了您的场景,其中包含以下内容:

"ID","Site","Location","Block"
1,"L1",1,"a"
2,"L2",2,"b"
3,"L3",3,"c"
4,"L4",4,"d"
对于此设置,如果我的理解正确,以下代码将达到您想要的效果:

x <- list.files( pattern = ".csv" )
info <- read.table( file = "info.txt", sep = ",", header = TRUE, 
                    row.names = FALSE, stringsAsFactors = FALSE )
y <- paste( info[ ,"Block" ], ".csv", sep = "" )
for( i in c( "Location", "Site" ) ) y <- paste( info[ ,i ], y, sep = "" )
file.rename( x, y )

list.files( pattern = ".csv" )
[1] "L11a.csv" "L22b.csv" "L33c.csv" "L44d.csv"

x我用四个csv文件和一个名为
info.txt的文件中的数据模拟了您的场景,其中包含以下内容:

"ID","Site","Location","Block"
1,"L1",1,"a"
2,"L2",2,"b"
3,"L3",3,"c"
4,"L4",4,"d"
对于此设置,如果我的理解正确,以下代码将达到您想要的效果:

x <- list.files( pattern = ".csv" )
info <- read.table( file = "info.txt", sep = ",", header = TRUE, 
                    row.names = FALSE, stringsAsFactors = FALSE )
y <- paste( info[ ,"Block" ], ".csv", sep = "" )
for( i in c( "Location", "Site" ) ) y <- paste( info[ ,i ], y, sep = "" )
file.rename( x, y )

list.files( pattern = ".csv" )
[1] "L11a.csv" "L22b.csv" "L33c.csv" "L44d.csv"

x我用四个csv文件和一个名为
info.txt的文件中的数据模拟了您的场景,其中包含以下内容:

"ID","Site","Location","Block"
1,"L1",1,"a"
2,"L2",2,"b"
3,"L3",3,"c"
4,"L4",4,"d"
对于此设置,如果我的理解正确,以下代码将达到您想要的效果:

x <- list.files( pattern = ".csv" )
info <- read.table( file = "info.txt", sep = ",", header = TRUE, 
                    row.names = FALSE, stringsAsFactors = FALSE )
y <- paste( info[ ,"Block" ], ".csv", sep = "" )
for( i in c( "Location", "Site" ) ) y <- paste( info[ ,i ], y, sep = "" )
file.rename( x, y )

list.files( pattern = ".csv" )
[1] "L11a.csv" "L22b.csv" "L33c.csv" "L44d.csv"
x这里是另一个选项:

info <- read.table( file = "info.txt", sep = ",", header = TRUE, row.names = NULL,
    stringsAsFactors = FALSE )

with(info, file.rename(paste0(ID, ".csv"), paste0(Site, Location, Block, ".csv")))
info这里是另一个选项:

info <- read.table( file = "info.txt", sep = ",", header = TRUE, row.names = NULL,
    stringsAsFactors = FALSE )

with(info, file.rename(paste0(ID, ".csv"), paste0(Site, Location, Block, ".csv")))
info这里是另一个选项:

info <- read.table( file = "info.txt", sep = ",", header = TRUE, row.names = NULL,
    stringsAsFactors = FALSE )

with(info, file.rename(paste0(ID, ".csv"), paste0(Site, Location, Block, ".csv")))
info这里是另一个选项:

info <- read.table( file = "info.txt", sep = ",", header = TRUE, row.names = NULL,
    stringsAsFactors = FALSE )

with(info, file.rename(paste0(ID, ".csv"), paste0(Site, Location, Block, ".csv")))

信息您根本不需要
编写.table
。使用
list.files
file.rename
。加上for循环和
粘贴
应该就是您所需要的了……事实上,
file.rename
似乎是矢量化的,所以您甚至可能不需要for循环。这可能被压缩到2-3行代码中。@joran感谢您的建议。您根本不需要
write.table
。使用
list.files
file.rename
。加上for循环和
粘贴
应该就是您所需要的了……事实上,
file.rename
似乎是矢量化的,所以您甚至可能不需要for循环。这可能被压缩到2-3行代码中。@joran感谢您的建议。您根本不需要
write.table
。使用
list.files
file.rename
。加上for循环和
粘贴
应该就是您所需要的了……事实上,
file.rename
似乎是矢量化的,所以您甚至可能不需要for循环。这可能被压缩到2-3行代码中。@joran感谢您的建议。您根本不需要
write.table
。使用
list.files
file.rename
。加上for循环和
粘贴
应该就是您所需要的了……事实上,
file.rename
似乎是矢量化的,所以您甚至可能不需要for循环。这可能被压缩到2-3行代码中。@joran谢谢你的建议。谢谢你解释joran的评论。我不知道如何编写for循环并使用paste()。您的代码正如我的示例所示,但我的实际情况要复杂一点。我的ID没有相应的csv文件,我的复制csv文件没有相应的单独ID(例如,1.csv和1r.csv,但数据文件中ID 1只有一行观察值)。如何修改此代码以使其工作?我不理解“但数据文件中ID 1只有一行观察”部分。你能修改你原来的问题,使它反映出真正的问题吗?谢谢你解释乔兰的评论。我不知道如何编写for循环并使用paste()。您的代码正如我的示例所示,但我的实际情况要复杂一点。我的ID没有相应的csv文件,我的复制csv文件没有相应的单独ID(例如,1.csv和1r.csv,但数据文件中ID 1只有一行观察值)。如何修改此代码以使其工作?我不理解“但数据文件中ID 1只有一行观察”部分。你能修改你原来的问题,使它反映出真正的问题吗?谢谢你解释乔兰的评论。我不知道如何编写for循环并使用paste()。您的代码正如我的示例所示,但我的实际情况要复杂一点。我的ID没有相应的csv文件,我的复制csv文件没有相应的单独ID(例如,1.csv和1r.csv,但数据文件中ID 1只有一行观察值)。如何修改此代码以使其工作?我不理解“但数据文件中ID 1只有一行观察”部分。你能修改你原来的问题,使它反映出真正的问题吗?谢谢你解释乔兰的评论。我不知道如何编写for循环并使用paste()。您的代码正如我的示例所示,但我的实际情况要复杂一点。我的ID没有相应的csv文件,我的复制csv文件没有相应的单独ID(例如,1.csv和1r.csv,但数据文件中ID 1只有一行观察值)。如何修改此代码以使其工作?我不理解“但数据文件中ID 1只有一行观察”部分。你能编辑你的原始问题,使它反映真实的问题吗?