Добавление части имени data.table в качестве суффикса к именам столбцов - PullRequest
1 голос
/ 01 октября 2019

Следующая функция добавляет суффикс к каждому столбцу 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 равно 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
}

Но почему-то это всегда возвращает что-то вроде «данных» вместо Session1_TopicA_Part3.

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Будет ли это работать для вас?

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"

Тогда вам просто нужно добавить вывод к именам столбцов.

0 голосов
/ 01 октября 2019

Как это?

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')

А затем применить функцию к различным именам таблиц

...