Nano Hash - криптовалюты, майнинг, программирование

создать новую переменную на основе имени набора данных в R

У меня есть несколько наборов данных, которые содержат одинаковые имена переменных, но разные значения, я пытаюсь создать новую переменную с именем group, которая будет различать каждый набор наборов данных (я делаю это, потому что я помещу все наборы данных в один, и я могу различать по группе). Вот пример для 2 наборов данных.

################################
###       Sample data        ### 
################################

set.seed(8547)
a=sample(1:20,15,replace=FALSE)
a=sort(a)
f=runif(15,0,1)
f=sort(f)
trt1=data.frame(a,f)

set.seed(1452)
a=sample(1:35,22,replace=FALSE)
a=sort(a)
f=runif(22,0,1)
f=sort(f)
trt2=data.frame(a,f)

names_of_dataframes <- ls.str(mode = "list")

#  I used a `for` loop because i have approximatively `10` datasets and i do not know if the `apply` family would work for this kind of treatment

for (i in length(names_of_dataframes)) {
  if(names_of_dataframes[i]=="trt1"){
    trt1$group=rep("trt1",nrow(trt1))
  }else if (names_of_dataframes[i]=="trt2"){
    trt2$group=rep("trt2",nrow(trt2))
  }
      
}

Я не знаю, что я делаю неправильно, но переменная group создается только для набора данных trt2, а не trt1. Есть мысли, что не так?

Заранее спасибо за вашу помощь


Ответы:


1

Мы можем загрузить все наборы данных в list с mget и ls

lst1 <- mget(ls(pattern = '^trt\\d+$'))
lst1 <- Map(cbind, lst1, group = names(lst1))

Если необходимо обновить исходные объекты, используйте list2env (хотя и не рекомендуется)

list2env(lst1, .GlobalEnv)

-проверить объекты

head(trt1)
#  a          f group
#1 1 0.03676253  trt1
#2 2 0.07212860  trt1
#3 3 0.10711856  trt1
#4 4 0.14691670  trt1
#5 5 0.33626002  trt1
#6 6 0.41223646  trt1

head(trt2)
#  a          f group
#1 2 0.01003053  trt2
#2 3 0.05251810  trt2
#3 4 0.08916620  trt2
#4 5 0.17498162  trt2
#5 6 0.24118046  trt2
#6 8 0.24816209  trt2

Или другой вариант assign

nm1 <- ls(pattern = '^trt\\d+$')
for(nm in nm1) {
     assign(nm, `[[<-`(get(nm), "group", value = nm))

}

Или используя map/mutate

library(dplyr)
library(purrr)
map(nm1, ~ get(.x) %>%
         mutate(group = .x))
06.02.2021
  • Это просто, быстро и чисто, как обычно @Akrun! Благодарю вас! Ваш первый вариант мне понравился больше, он для меня новый! map/mutate тоже интересно! 06.02.2021
  • У вас есть идеи @Akrun, как изменить pattern в вашем первом варианте, когда наборы данных имеют совершенно разные имена? 06.02.2021
  • @Janet Если у вас есть только эти объекты в глобальной среде, вам не нужен какой-либо шаблон, например mget(ls()). Я использовал шаблон, потому что у меня были другие объекты, не связанные с этим постом. 06.02.2021
  • Хорошо, я понимаю, но у меня их много, но те, которые меня интересуют, все начинаются с dat., например dat.trt1, dat.trt2, dat.gr3 06.02.2021
  • @Janet Если они у вас есть, dat.trt/dat.grp используйте ls(pattern = "^dat\\.\\w+\\d+$") 06.02.2021
  • Большое спасибо @Akrun! это именно то, что мне было нужно. 06.02.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..