Lapply is not a vectorized function. It is compact to read, but it would not be 
worth using for this calculation. 

However, if your data frame had multiple color columns in your data frame that 
you wanted to make responses for then you might want to use lapply as a more 
compact version of a for loop to repeat this operation. 

colordata2 <- data.frame(id = c(1,2,3,4,5), color1 = c("blue", "red",
"green", "blue", "orange"), color2 = c("orange", "green",
"blue", "red", "red"))
responses <- lapply( colordata2[ -1 ], function(col) { ifelse(col == 'blue', 1, 
0) } )
names(responses) <- names( colordata2 )[-1]

where each of the columns other than the first is handed in turn to the 
anonymous function that does the response calculation. The result is a data 
frame (list of columns) with no column names, so I give the new columns names 
based on the old column names. You could choose different names,  e.g.

names(responses) <- paste0( "response", 1:2 )

but you have to be careful to fix that code whenever you change the colordata2 
data frame to have more columns. 
-- 
Sent from my phone. Please excuse my brevity.

On April 7, 2016 4:57:04 AM PDT, Michael Artz <michaelea...@gmail.com> wrote:
>Thaks so much!  And how would you incorporate lapply() here?
>
>On Thu, Apr 7, 2016 at 6:52 AM, David Barron <dnbar...@gmail.com>
>wrote:
>
>> ifelse is vectorised, so just use that without the loop.
>>
>> colordata$response <- ifelse(colordata$color == 'blue', 1, 0)
>>
>> David
>>
>> On 7 April 2016 at 12:41, Michael Artz <michaelea...@gmail.com>
>wrote:
>>
>>> Hi I'm not sure how to ask this, but its a very easy question to
>answer
>>> for
>>> an R person.
>>>
>>> What is an easy way to check for a column value and then assigne a
>new
>>> column a value based on that old column value?
>>>
>>> For example, Im doing
>>>  colordata <- data.frame(id = c(1,2,3,4,5), color = c("blue", "red",
>>> "green", "blue", "orange"))
>>>  for (i in 1:nrow(colordata)){
>>>    colordata$response[i] <- ifelse(colordata[i,"color"] == "blue",
>1, 0)
>>>  }
>>>
>>> which works,  but I don't want to use the for loop I want to
>"vecotrize"
>>> this.  How would this be implemented?
>>>
>>>         [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> 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.
>>>
>>
>>
>
>       [[alternative HTML version deleted]]
>
>______________________________________________
>R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>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.

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

Reply via email to