Hi Tom,
thanks for your reply.
Yes, that's exactly what I am looking for. I did not know about the automatic type conversion in R.
#-- cut --
ds_example <-
structure(
list(
year2013 = c(0, 0, 0, 1, 1, 1, 1, 0),
year2014 = c(0,
0, 1, 1, 0, 0, 1, 1),
year2015 = c(0, 1, 1, 1, 0, 1, 0, 0)
),
.Names = c("year2013",
"year2014", "year2015"),
row.names = c(NA, 8L),
class = "data.frame"
)
#-- Proposal: works!
as.numeric(with(ds_example,paste(1,year2013,year2014,year2015,sep='')))
# I store my know-how about R in functions for later use.
#--? Putting it in a function - does not work!
t_make_binary_vector <- function(dataset,
input_variables,
output_variable = "binary_vector") {
dataset[output_variable] <- "1"
print(dataset[output_variable])
for (variable in input_variables) {
print(variable)
dataset[output_variable] <- paste(dataset[output_variable],
dataset[variable],
sep='')
}
# print(dataset[output_variable])
dataset[output_variable] <- as.integer(dataset[output_variable])
return(dataset)
}
t_make_binary_vector(dataset = ds_example,
input_variables = c("year2013", "year2014", "year2015"),
output_variable = "binary_vector")
#-- Doesn't work either.
t_make_binary_vector <- function(dataset,
input_variables,
output_variable = "binary_vector") {
dataset[output_variable] <- as.integer(paste(1, dataset[ , input_variables], sep = ''))
return(dataset)
}
t_make_binary_vector(dataset = ds_example,
input_variables = c("year2013", "year2014", "year2015"),
output_variable = "binary_vector")
#-- cut --
Why is R taking the parameter value itself to paste it together instead of referencing the variable within the dataset?
What did I get wrong about R? How can I fix it?
Kind regards
Georg
Gesendet: Donnerstag, 16. Juni 2016 um 16:13 Uhr
Von: "Tom Wright" <tom at maladmin.com>
An: G.Maubach at weinwolf.de
Cc: "R. Help" <r-help at r-project.org>
Betreff: Re: [R] Building a binary vector out of dichotomous variables
Does this do what you want?
as.numeric(with(ds_example,paste(1,year2013,year2014,year2015,sep='')))
On Thu, Jun 16, 2016 at 8:57 AM, <G.Maubach at weinwolf.de> wrote:
Hi All,
I need to build a binary vector made of a set of dichotomous variables.
What I have so far is:
-- cut --
ds_example <-
structure(
list(
year2013 = c(0, 0, 0, 1, 1, 1, 1, 0),
year2014 = c(0,
0, 1, 1, 0, 0, 1, 1),
year2015 = c(0, 1, 1, 1, 0, 1, 0, 0)
),
.Names = c("year2013",
"year2014", "year2015"),
row.names = c(NA, 8L),
class = "data.frame"
)
attach(ds_example)
base <- 1000
binary_vector <- base + year2013 * 100 + year2014 * 10 + year2015
detach(ds_example)
binary_vector
ds_example <- cbind(ds_example, binary_vector)
varlist <- c("year2013", "year2014", "year2015")
base <- 10^length(varlist)
binary_vector <- NULL
for (i in 1:3) {
binary_vector <-
base +
ds_example [[varlist[i]]] * base / (10 ^ i)
}
ds_example <- cbind(ds_example, binary_vector)
message("Wrong result!")
ds_example
-- cut --
How do I get vectors like 1000 1001 1011 1111 1100 1101 1110 1010 for
each case?
Is there a better approach than mine?
Kind regards
Georg