Message-ID: <4940532C.30004@comcast.net>
Date: 2008-12-10T23:39:24Z
From: Marc Schwartz
Subject: How do I multiply labeled vectors of numbers?
In-Reply-To: <d2f514e20812101517y64994691gde6a1e2bedeb1dda@mail.gmail.com>
on 12/10/2008 05:17 PM Bill McNeill (UW) wrote:
> I'm an R newbie trying to do an operation that seems like it should be very
> simple, but after much playing around with the interface and reading "An
> Introduction to R" I can figure out how to do it.
>
> I have two text files. File1 contains:
>
> type n
> dog 2
> cat 4
> horse 6
>
> File2 contains:
>
> type n
> horse 1
> dog 3
> cat 9
> mouse 11
>
> I want to read both files into R and multiply corresponding values of n so
> that I end up with:
>
> dog 2*3 = 6
> cat 4*9 = 36
> horse 6*1 = 6
> mouse 0*11 = 0
>
> Note that the type rows are not necessarily in the same order in the two
> files, and that a missing type gets a default n = 0 value.
>
> I figure the way to do this is use read.table and do the appropriate
> manipulation of the factors, but I can't figure out what those manipulations
> would be. Basically I want to use a factor table as a hash table, but I
> haven't been able to figure out how to do this, which makes me think I'm not
> conceptualizing this is the correct R-ish way.
>
> Thanks.
F3 <- merge(F1, F2, by = "type", all = TRUE)
> F3
type n.x n.y
1 cat 4 9
2 dog 2 3
3 horse 6 1
4 mouse NA 11
# Convert NA's to 0
F3[is.na(F3)] <- 0
> F3
type n.x n.y
1 cat 4 9
2 dog 2 3
3 horse 6 1
4 mouse 0 11
F3$prod <- F3$n.x * F3$n.y
> F3
type n.x n.y prod
1 cat 4 9 36
2 dog 2 3 6
3 horse 6 1 6
4 mouse 0 11 0
See ?merge
HTH,
Marc Schwartz