r语言 - 将 data.table 名称的一部分作为后缀添加到列名称中



以下函数为 data.table 的每一列添加一个后缀:

thefunction <- function (data) {
colnames(data) <- paste(colnames(data), "example", sep = "_")
data
}
library(data.table)  
Session1_TopicA_Part3 <- fread(
"A   B  C  D  E  F  iso   year   
0   A   NA  1  NA  NA  NLD   2009   
1   Y   NA  2  NA  NA  NLD   2009   
0   Q   NA  3  NA  NA  AUS   2011   
1   NA  NA  4  NA  NA  AUS   2011   
0   0   NA  7  NA  NA  NLD   2008   
1   1   NA  1  NA  NA  NLD   2008   
0   1   NA  3  NA  NA  AUS   2012   
0   NA  1   NA  1  NA  ECU   2009   
1   NA  0   NA  2  0   ECU   2009   
0   NA  0   NA  3  0   BRA   2011   
1   NA  0   NA  4  0   BRA   2011   
0   NA  1   NA  7  NA  ECU   2008   
1   NA  0   NA  1  0   ECU   2008   
0   NA  0   NA  3  2   BRA   2012   
1   NA  0   NA  4  NA  BRA   2012",
header = TRUE
)
Session1_TopicA_Part3 <- thefunction(Session1_TopicA_Part3)

但是,我希望要添加的后缀只是 data.table 名称的一部分(总共 64 个不同的 data.tables(,在本例中会导致后缀_TopicA_Part3.

如何调整语法以实现此目的?

编辑:所需的结果取决于 data.table 名称。

如果 data.table name 是Session1_TopicA_Part3,后缀是_TopicA_Part3

如果 data.table name 是Session2_TopicB_Part6,后缀是_TopicB_Part6

如果 data.table name 是Session4_TopicA_Part7,后缀是_TopicA_Part7

编辑2:我现在正在尝试以下操作:

thefunction <- function (data) {
object_name <- get("data") # To get the string of the object "data" added to the function.
object_name1 <- paste0("_", sapply(strsplit(object_name,"_"), `[`, 3))
object_name2 <- paste0("_", sapply(strsplit(object_name,"_"), `[`, 2))
object_name <- paste0(object_name1,object_name2)
colnames(data) <- paste(colnames(data), object_name, sep = "_")
data
}

但不知何故,这总是返回类似"数据"的东西,而不是Session1_TopicA_Part3.

这对你有用吗?

string <- "sometext_Topic1Test" # This is your object name from the envir.
paste0("_", sapply(strsplit(string,"_"), `[`, 2))

输出 :"_Topic1Test"

您可以通过以下方式找到对象名称:

object_name <- deparse(quote(object))
this also work :
object_name <- deparse(substitute(data))

输出为 :"object"

然后,您只需将输出添加到列名称中即可。

像这样?

the_function = function(tablename){
# tablename <- deparse(quote(Session1_TopicA_Part3)) # to save your variable name in a string
table = eval(parse(text = tablename))
# tablename = substitute(table)
cat(tablename)
splitted.name = strsplit(tablename, split = '_')
to_add = paste(splitted.name[[1]][2], splitted.name[[1]][3], sep = '_')
colnames(table) = paste(colnames(Session1_TopicA_Part3), to_add, sep = "_")
return(table)
}
the_function('Session1_TopicA_Part3')

然后将函数应用于不同的表名

最新更新