Re: [R] Add column to dataframe based on code in other column

2013-08-08 Thread MacQueen, Don
Assuming your data frame of users is named 'users',
and using your mapping vectors:

 users$regions <- ''
 users$regions[ users$State_Code) %in% NorthEast ] <- 'NorthEast'

and repeat for the other regions


Or, if you put your mappings in a data frame then it is
as simple as

  merge(yourdataframe, regions)

(assuming the data frame of mappings is named 'regions')


The regions data frame should have two columns and 50 rows
The two columns contain the state codes and their
respective regions.

How you get that data frame of regions could vary;
here's an example using your vectors, but just two
of the regions:

regions <- data.frame(
  region= c( rep('NorthEast',length(NorthEast)),
 rep('MidWest,length(MidWest))
   ),
  State_Code=c(NorthEast,Midwest)
  )

Note that this is untested. For example,
I could easily have mismatched parentheses.

The whole thing could also be done using match(),
without creating the dataframe of regions.


-Don

-- 
Don MacQueen

Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062





On 8/8/13 2:33 AM, "Dark"  wrote:

>Hi all,
>
>I have a dataframe of users which contain US-state codes.
>Now I want to add a column named REGION based on the state code. I have
>already done a mapping:
>
>NorthEast <- c(07, 20, 22, 30, 31, 33, 39, 41, 47)
>MidWest <- c(14, 15, 16, 17, 23, 24, 26, 28, 35, 36, 43, 52)
>South <- c(01, 04, 08, 09, 10, 11, 18, 19, 21, 25, 34, 37, 42, 44, 45, 49,
>51)
>West <- c(02, 03, 05, 06, 12, 13, 27, 29, 32, 38, 46, 50, 53)
>Other <- c(40, 48, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 94,
>98, 99)
>
>So for example:
>NameState_Code
>Tom   20
>Harry 56
>Ben 05
>Sally   04
>
>Should become like:
>So for example:
>NameState_Code REGION
>Tom   20   NorthEast
>Harry 56   Other
>Ben 05  West
>Sally   04   South
>
>Could anyone help me with a clever statement?
>
>
>
>--
>View this message in context:
>http://r.789695.n4.nabble.com/Add-column-to-dataframe-based-on-code-in-oth
>er-column-tp4673335.html
>Sent from the R help mailing list archive at Nabble.com.
>
>__
>R-help@r-project.org mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide
>http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Add column to dataframe based on code in other column

2013-08-08 Thread arun
dat1<- read.table(text="
Name    State_Code
Tom  20
Harry    56
Ben    05
Sally  04
",sep="",header=TRUE,stringsAsFactors=FALSE)

dat2<- do.call(cbind,list(NorthEast,MidWest,South,West,Other)) 
 colnames(dat2)<- c("NorthEast","MidWest","South","West","Other")
 dat2<- as.data.frame(dat2)
library(reshape2)
datM<-melt(dat2)
colnames(datM)<- c("REGION","State_Code")
library(plyr)
join(dat1,datM,type="left",match="first",by="State_Code")[,c(2,1,3)]
#   Name State_Code    REGION
#1   Tom 20 NorthEast
#2 Harry 56 Other
#3   Ben  5  West
#4 Sally  4     South
A.K.



- Original Message -----
From: Dark 
To: r-help@r-project.org
Cc: 
Sent: Thursday, August 8, 2013 5:33 AM
Subject: [R] Add column to dataframe based on code in other column

Hi all,

I have a dataframe of users which contain US-state codes. 
Now I want to add a column named REGION based on the state code. I have
already done a mapping:

NorthEast <- c(07, 20, 22, 30, 31, 33, 39, 41, 47)
MidWest <- c(14, 15, 16, 17, 23, 24, 26, 28, 35, 36, 43, 52)
South <- c(01, 04, 08, 09, 10, 11, 18, 19, 21, 25, 34, 37, 42, 44, 45, 49,
51)
West <- c(02, 03, 05, 06, 12, 13, 27, 29, 32, 38, 46, 50, 53)
Other <- c(40, 48, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 94,
98, 99)

So for example:
Name    State_Code
Tom       20
Harry     56
Ben         05
Sally       04

Should become like:
So for example:
Name    State_Code REGION
Tom       20                   NorthEast
Harry     56                   Other
Ben         05                  West
Sally       04                   South

Could anyone help me with a clever statement?



--
View this message in context: 
http://r.789695.n4.nabble.com/Add-column-to-dataframe-based-on-code-in-other-column-tp4673335.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Add column to dataframe based on code in other column

2013-08-08 Thread Bert Gunter
Dark:

1. In future, please use dput()  to post data to enable us to more
easily read them from your email.

2. As Berend demonstrates, using a more appropriate data structure is
what's required. Here is a slightly shorter, but perhaps trickier
alternative to his solution:

> df  ## Your example data frame
   Name State_Code
1   Tom 20
2 Harry 56
3   Ben  5
4 Sally  4

> l 
> <-list(MidWest=MidWest,South=South,NorthEast=NorthEast,Other=Other,West=West)
> df <- within(df,regions <- 
> rep(names(l),sapply(l,length))[match(State_Code,unlist(l))])
> df
   Name State_Code   regions
1   Tom 20 NorthEast
2 Harry 56 Other
3   Ben  5  West
4 Sally  4 South

3. Need I say that there may be other alternatives that might be better.

Cheers,
Bert


On Thu, Aug 8, 2013 at 7:14 AM, Berend Hasselman  wrote:
>
> On 08-08-2013, at 11:33, Dark  wrote:
>
>> Hi all,
>>
>> I have a dataframe of users which contain US-state codes.
>> Now I want to add a column named REGION based on the state code. I have
>> already done a mapping:
>>
>> NorthEast <- c(07, 20, 22, 30, 31, 33, 39, 41, 47)
>> MidWest <- c(14, 15, 16, 17, 23, 24, 26, 28, 35, 36, 43, 52)
>> South <- c(01, 04, 08, 09, 10, 11, 18, 19, 21, 25, 34, 37, 42, 44, 45, 49,
>> 51)
>> West <- c(02, 03, 05, 06, 12, 13, 27, 29, 32, 38, 46, 50, 53)
>> Other <- c(40, 48, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 94,
>> 98, 99)
>>
>> So for example:
>> NameState_Code
>> Tom   20
>> Harry 56
>> Ben 05
>> Sally   04
>>
>> Should become like:
>> So for example:
>> NameState_Code REGION
>> Tom   20   NorthEast
>> Harry 56   Other
>> Ben 05  West
>> Sally   04   South
>>
>
> dd <- read.table(text="NameState_Code
> Tom   20
> Harry 56
> Ben 05
> Sally   04", header=TRUE, stringsAsFactors=FALSE)
>
> # Create table for regions indexed by state_code
>
> region.table <- rep("UNKNOWN",99)
> region.table[NorthEast] <- "NorthEast"
> region.table[MidWest] <- "MidWest"
> region.table[South] <- "South"
> region.table[West] <- "West"
> region.table[Other] <- "Other"
> region.table
>
> # then this is easy
>
> dd[,"REGION"] <- region.table[dd$State_Code]
>
>
> Berend
>
> __
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Add column to dataframe based on code in other column

2013-08-08 Thread Berend Hasselman

On 08-08-2013, at 11:33, Dark  wrote:

> Hi all,
> 
> I have a dataframe of users which contain US-state codes. 
> Now I want to add a column named REGION based on the state code. I have
> already done a mapping:
> 
> NorthEast <- c(07, 20, 22, 30, 31, 33, 39, 41, 47)
> MidWest <- c(14, 15, 16, 17, 23, 24, 26, 28, 35, 36, 43, 52)
> South <- c(01, 04, 08, 09, 10, 11, 18, 19, 21, 25, 34, 37, 42, 44, 45, 49,
> 51)
> West <- c(02, 03, 05, 06, 12, 13, 27, 29, 32, 38, 46, 50, 53)
> Other <- c(40, 48, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 94,
> 98, 99)
> 
> So for example:
> NameState_Code
> Tom   20
> Harry 56
> Ben 05
> Sally   04
> 
> Should become like:
> So for example:
> NameState_Code REGION
> Tom   20   NorthEast
> Harry 56   Other
> Ben 05  West
> Sally   04   South
> 

dd <- read.table(text="NameState_Code
Tom   20
Harry 56
Ben 05
Sally   04", header=TRUE, stringsAsFactors=FALSE)

# Create table for regions indexed by state_code

region.table <- rep("UNKNOWN",99)
region.table[NorthEast] <- "NorthEast"
region.table[MidWest] <- "MidWest"
region.table[South] <- "South"
region.table[West] <- "West" 
region.table[Other] <- "Other"
region.table

# then this is easy

dd[,"REGION"] <- region.table[dd$State_Code]


Berend

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


[R] Add column to dataframe based on code in other column

2013-08-08 Thread Dark
Hi all,

I have a dataframe of users which contain US-state codes. 
Now I want to add a column named REGION based on the state code. I have
already done a mapping:

NorthEast <- c(07, 20, 22, 30, 31, 33, 39, 41, 47)
MidWest <- c(14, 15, 16, 17, 23, 24, 26, 28, 35, 36, 43, 52)
South <- c(01, 04, 08, 09, 10, 11, 18, 19, 21, 25, 34, 37, 42, 44, 45, 49,
51)
West <- c(02, 03, 05, 06, 12, 13, 27, 29, 32, 38, 46, 50, 53)
Other <- c(40, 48, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 94,
98, 99)

So for example:
NameState_Code
Tom   20
Harry 56
Ben 05
Sally   04

Should become like:
So for example:
NameState_Code REGION
Tom   20   NorthEast
Harry 56   Other
Ben 05  West
Sally   04   South

Could anyone help me with a clever statement?



--
View this message in context: 
http://r.789695.n4.nabble.com/Add-column-to-dataframe-based-on-code-in-other-column-tp4673335.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.