Skip to content

faster way to use filter this

3 messages · Paul Tremblay, David Winsemius, Bert Gunter

#
I have the following (simplified) vectors:
index <- c("shoe"  "shirt" "fruit")
cost <- c(100, 50, 2)
data <- c("shirt", "shoe", "vegetable")

I want my outcome to be:

(50, 100, 0)

(shirt => 50, shoe => 100, vegetable => not found, so 0)

I have written the following function:


for (i in custom_list) {
+ this_cost <- cost[index == i]

+ message(this_cost)
+ }


This gives me (50, 100)

I haven't figured out how to use the ifelse. But more importantly, I think
there should be an easier, and faster way to do this with vectors?

Thanks!

Paul
#
c(cost,0)[ match(index, data, nomatch = length(index)+1) ]
#[1]  50 100   0
David Winsemius
Alameda, CA, USA
#
You neglected the commas in your index expression!

See ?match

as in:
[1]  50 100  NA

(and "data" is a bad name to use as there is already a data() function in R).

Please DO go through an R tutorial or two to learn about some of these
basic, useful  R capabilities. There are many good ones on the Web.

Cheers,
Bert
Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Fri, Apr 15, 2016 at 5:58 PM, Paul Tremblay <paulhtremblay at gmail.com> wrote: