Изменение имен списков в списке - PullRequest
0 голосов
/ 27 июня 2018

У меня есть следующий фрейм данных, который я разделил на три списка на основе различий в названии модели ("Bristol_A", "Bristol_B" и "Bristol_C")

   a=c("Bristol_A","R1",358723.0,171704.0,1.0,36.818500,4.0222700,1.38895000)
   b=c("Bristol_A","R2",358723.0,171704.0,2.6,36.447300,4.0116100,1.37479000)
   c=c("Bristol_A","R3",358723.0,171704.0,5.0,35.615400,3.8092600,1.34301000)
   d=c("Bristol_B","R1",358723.0,171704.0,1.0,39.818300,2.4475600,1.50384000)
   e=c("Bristol_B","R2",358723.0,171704.0,2.6,39.391600,2.4209900,1.48754000)
   f=c("Bristol_B","R3",358723.0,171704.0,5.0,38.442700,2.3618400,1.45126000)
   g=c("Bristol_C","R1",358723.0,171704.0,1.0,31.246400,2.2388000,1.30652000)
   h=c("Bristol_C","R2",358723.0,171704.0,2.6,30.911600,2.2144800,1.29234000)
   i=c("Bristol_C","R3",358723.0,171704.0,5.0,30.166700,2.1603000,1.26077000)
   df=data.frame(a,b,c,d,e,f,g,h,i)
   df=t(df)
   df=data.frame(df)
   col_list=list("Model","Receptor.name","X(m.)","Y(m.)","Z(m.)",
          "nox","PM10","PM2.5")
   colnames(df)=col_list
   data_Report_list=split.data.frame(df, df$Model)
   list2env(split(df, df$Model), envir = .GlobalEnv) 

Я надеюсь добиться переименования отдельных списков в «Model_A» (с последующим увеличением в «Model_B», «Model_C» и т. Д.)

Мое текущее решение (которое не работает) было:

    names(data_Report_list[1])="Model A"
    names(data_Report_list[2])="Model B"
    names(data_Report_list[3])="Model C"

Однако, помимо того, что он не работает, мне нужно, чтобы скрипт был автоматизирован, поэтому я не хочу записывать каждую строку отдельно, и вместо этого R распознает, что в этом списке X файлов, поэтому он меняет такое же количество имен в списке. Например, если в списке 6 моделей, R назовет их от «Model_A» до «Model_F». Это вообще возможно?

-------------------------------- EDIT -------------- --------------------

вывод комментария Акруна таков:

     $`Bristol_A`
         Model_A Receptor.name  X(m.)  Y(m.) Z(m.)     nox    PM10   PM2.5
    a Bristol_A            R1 358723 171704     1 36.8185 4.02227 1.38895
    b Bristol_A            R2 358723 171704   2.6 36.4473 4.01161 1.37479
    c Bristol_A            R3 358723 171704     5 35.6154 3.80926 1.34301 

но мне нужно вот что (первая строка меняется с "Bristol_A" на "Model_A")

      $`Model_A`
        Model_A Receptor.name  X(m.)  Y(m.) Z(m.)     nox    PM10   PM2.5
      a Bristol_A            R1 358723 171704     1 36.8185 4.02227 1.38895
      b Bristol_A            R2 358723 171704   2.6 36.4473 4.01161 1.37479
      c Bristol_A            R3 358723 171704     5 35.6154 3.80926 1.34301

1 Ответ

0 голосов
/ 27 июня 2018

Мы можем просмотреть list с помощью Map и назначить имя первого столбца

nm1 <- paste0("Model_", LETTERS[seq_along(data_Report_list)])
data_Report_list <- Map(function(x, y) {names(x)[1] <- y; x}, 
            data_Report_list, nm1)
names(data_Report_list) <- nm1
data_Report_list[1]
#$Model_A
#    Model_A Receptor.name  X(m.)  Y(m.) Z(m.)     nox    PM10   PM2.5
#a Bristol_A            R1 358723 171704     1 36.8185 4.02227 1.38895
#b Bristol_A            R2 358723 171704   2.6 36.4473 4.01161 1.37479
#c Bristol_A            R3 358723 171704     5 35.6154 3.80926 1.34301
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...