Dynamic Variable naming in r

Koushik Saha picture Koushik Saha · Dec 31, 2013 · Viewed 16k times · Source
structure(list(Metrics = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 
5L, 6L), .Label = c("  LINESCOMM ", "  NCNBLOC_FILE ", "  RCYCLOMATIC ", 
"  RISK ", "  RMAXLEVEL ", "  RNOEXSTAT "), class = "factor"), 
    Project = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
    2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L
    ), .Label = c("  Demo_Architect ", "  Demo_May_10 ", "  Demo_May_14 ", 
    "  NPP "), class = "factor"), Value = c(1172, 1500, 142, 
    4.241, 24, 98, 1139, 1419, 128, 3.546, 22, 85, 1172, 1500, 
    142, 4.241, 24, 98, 115008, 148903, 14539, 105.914, 604, 
    15710)), .Names = c("Metrics", "Project", "Value"), row.names = c(NA, 
-24L), class = "data.frame")->agg

I am trying to do: For each unique project name is want create separate variable name containing the desired values.

I am trying the below code:

x=data.frame()
attach(agg)
r<-as.character(unique(Project))
for(i in length(agg))
{
  x<-subset(agg,Project==r[i],select=c("Project","Metrics","Value"))
  assign() #This is where i am making mistake while creating dynamic variable naming
}

in other words i want to create separate variable name each time the for loop executes.

NOTE: it is preferred to have variable names to be in the name of "project"columns values.

Answer

Mark Heckmann picture Mark Heckmann · Dec 31, 2013

assign is used by supplying the name of the variable you want to create first and the value it should have as second argument. Note that as your project names contain leading blanks I additionally used str_trim to get rid of them.

library(stringr)
projects <- levels(agg$Project)
for (p in projects) {
  x <- subset(agg, Project==p)
  assign(str_trim(p), x)    
}

Now you have the projects as variables in your workspace:

ls()
[1] "agg"            "Demo_Architect" "Demo_May_10"    "Demo_May_14"    "NPP"           
[6] "p"              "projects"       "x"

E.g.

> Demo_Architect
          Metrics           Project    Value
1      LINESCOMM    Demo_Architect  1172.000
2   NCNBLOC_FILE    Demo_Architect  1500.000
3    RCYCLOMATIC    Demo_Architect   142.000
4           RISK    Demo_Architect     4.241
5      RMAXLEVEL    Demo_Architect    24.000
6      RNOEXSTAT    Demo_Architect    98.000