以下函数为 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')
然后将函数应用于不同的表名