添加 data.table 名称的一部分作为列名的后缀
Adding a part of the data.table name as a suffix to the column names
以下函数为 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.table),在本例中这将导致到后缀 _TopicA_Part3
.
如何调整语法来实现这一点?
编辑:所需结果取决于 data.table 名称。
如果data.table名字是Session1_TopicA_Part3
,后缀是_TopicA_Part3
.
如果data.table名字是Session2_TopicB_Part6
,后缀是_TopicB_Part6
。
如果data.table名字是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
}
但不知何故,这总是 returns 类似于 "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')
然后将函数应用于不同的 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.table),在本例中这将导致到后缀 _TopicA_Part3
.
如何调整语法来实现这一点?
编辑:所需结果取决于 data.table 名称。
如果data.table名字是Session1_TopicA_Part3
,后缀是_TopicA_Part3
.
如果data.table名字是Session2_TopicB_Part6
,后缀是_TopicB_Part6
。
如果data.table名字是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
}
但不知何故,这总是 returns 类似于 "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')
然后将函数应用于不同的 table 名称