Создать новый столбец в нескольких фреймах данных со значением, зависящим от имени фрейма данных - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть несколько фреймов данных с одинаковыми именами в R. Я ищу удобный способ создания нового столбца в каждом из этих фреймов данных.Значения в этих столбцах должны зависеть от имени фрейма данных.

У меня есть:

dfARCHIMEDES
    var1   var2
     a      b
     c      d

dfPYTHAGORAS
    var1   var2
     e      f
     g      h

И оно должно стать:

dfARCHIMEDES
    var1   var2   newvar
     a      b      ARCHIMEDES
     c      d      ARCHIMEDES

dfPYTHAGORAS
    var1   var2   newvar
     e      f      PYTHAGORAS
     g      h      PYTHAGORAS

Идетне говоря уже о том, что если бы данные были такими простыми, это была бы легкая задача.Однако в настоящее время у меня есть около 250 фреймов данных с 15 столбцами и 500 строками в каждом.

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Вы можете получить вектор с именами всех фреймов данных в глобальной среде, выполнив:

library(dplyr)

df_names <- 
  sapply(.GlobalEnv, is.data.frame) %>% 
  which() %>% 
  names()

После этого цикл выполнит свою работу:

for (i in df_names) {
  assign(i, cbind(get(i), newvar = i))
}
0 голосов
/ 23 сентября 2018

Вы можете подойти к этому следующим образом.Смотрите комментарии в коде.

# make some sample data (which OP should provide...)
dfARCHIMEDES <- data.frame(var1 = c("a", "c"),
                           var2 = c("b", "d"))
dfPYTHAGORAS <- data.frame(var1 = c("e", "g"),
                           var2 = c("g", "h"))

# collect all object names that start with a "df" from your workspace
get.dfs <- ls(pattern ="^df")

# go through each data.frame
for (i in get.dfs) {
  tmp <- get(i) # save the data.frame into a temporary variable
  newname <- gsub("^df", "", i) # remove the df part from the name
  tmp$newvar <- newname # create new variable with the new name
  assign(i, tmp) # re-write the data.frame
}

> dfARCHIMEDES
  var1 var2     newvar
1    a    b ARCHIMEDES
2    c    d ARCHIMEDES
> dfPYTHAGORAS
  var1 var2     newvar
1    e    g PYTHAGORAS
2    g    h PYTHAGORAS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...