vendredi 21 août 2015

use a string character-location identity to create a new variable

So I have been able to achieve my desired output, but I am sure that one can use a string to achieve a much more efficient code.

Let play with this data

set.seed(123)

A <- 1:100
type.a <- rnorm(100, mean=5000, sd=1433)
type.b <- rnorm(100, mean=5000, sd=1425)
type.c <- rnorm(100, mean=5000, sd=1125)
type.d <- rnorm(100, mean=5000, sd=1233)

df1 <- data.frame(A, type.a, type.b, type.c, type.d)

Now we want to create a new variable for df1 that will identity if a type(a:d) begun with number 1. So I have used this code:

df1$Type_1 <- with(df1, ifelse((type.a < 2000 & type.a > 999)|(type.b < 2000 & type.c > 999)|
                                (type.c < 2000 & type.c > 999)|(type.d < 2000 & type.d > 999), 1,0))

Or similiarly, this also:

df1$type_1 <- with(df1, ifelse(type.a < 2000 & type.a > 999, 1,
                              ifelse(type.b < 2000 & type.c > 999, 1, 
                                     ifelse(type.c < 2000 & type.c > 999, 1,
                                             ifelse(type.d < 2000 & type.d > 999, 1,0)))))

Now my question form two parts

How can you use a string which will look at only the first digit of type(a:d) to test if it is equal to our constraint. (in this instance equal to 1)

Secondly, I have more than four columns of data. Thus I dont think it is efficient I specify column names each time. Can the use of [,x:y] be used?

The code then be used to create 9 new columns of data (ie. type_1 & type_2 ... type_9), as the first digit of our type(a:d) has a range of 1:9

Aucun commentaire:

Enregistrer un commentaire