Hi:

This isn't the most elegant way, I'm sure, but here's one approach.

library(reshape)
# read in your data...I had to surround the text strings with quotes because
of the spaces
df <- read.table(textConnection("
TractID StandID Species CruiseDate      DBHClass        TreesPerAcre
'Carbon  Stand' 1 'Loblolly Pine'          5/20/2010        10      1.2
'Carbon  Stand' 1 'Loblolly Pine'          5/20/2010        12      1.2
'Carbon  Stand' 1 'Loblolly Pine'          5/20/2010        14      0.61
'Carbon  Stand' 1 'Loblolly Pine'          5/20/2010        16      0.75
'Carbon  Stand' 1 'Hard Hardwoods'  5/20/2010       6               27.4
'Carbon  Stand' 1 'Hard Hardwoods'  5/20/2010       8       16.4
'Carbon  Stand' 1 'Hard Hardwoods'  5/20/2010       10      16.1
'Carbon  Stand' 1 'Hard Hardwoods'  5/20/2010       12      18.3
'Carbon  Stand' 1 'Hard Hardwoods'  5/20/2010       14      9.9"), header =
TRUE)

# Generate a matrix that expands the DBHs in each row and column concatenate
DBH <- t(apply(df, 1, function(x) as.numeric(x[5]) + seq(-0.9, 1, by =
0.1)))
df2 <- cbind(df, DBH)
# Divide the TreesPerAcre by 20
df2$TreesPerAcre <- df2$TreesPerAcre/20
# reshape from wide to long using the reshape function melt()
df3 <- melt(df2, id = 1:6)     # a 180 x 8 data frame
df3 <- df3[order(df3$DBHClass, df3$value), ]
> head(df3)
         TractID StandID        Species CruiseDate DBHClass TreesPerAcre
5  Carbon  Stand       1 Hard Hardwoods  5/20/2010        6         1.37
14 Carbon  Stand       1 Hard Hardwoods  5/20/2010        6         1.37
23 Carbon  Stand       1 Hard Hardwoods  5/20/2010        6         1.37
32 Carbon  Stand       1 Hard Hardwoods  5/20/2010        6         1.37
41 Carbon  Stand       1 Hard Hardwoods  5/20/2010        6         1.37
50 Carbon  Stand       1 Hard Hardwoods  5/20/2010        6         1.37
   variable value
5         1   5.1
14        2   5.2
23        3   5.3
32        4   5.4
41        5   5.5
50        6   5.6

You'll likely need to convert the CruiseDate to a date variable at some
point; see ?as.Date, especially the format argument.

If you need this as a function to be applied multiple times,

DBHspread <- function(df) {

    # Function to spread out the DBHClass values over an interval of
    # length 2 in increments of 0.1, and divide TreesPerAcre by 20 to
    # compensate for change in class width.

    require(reshape)

    # Generate a matrix that expands the DBHs in each row and column
concatenate
    # Since DBHClass (variable 5) is integer, it needs to be converted to
numeric
    # In this context, x is the i-th row of the data frame.
    DBH <- t(apply(df, 1, function(x) as.numeric(x[5]) + seq(-0.9, 1, by =
0.1)))

    # Concatenate new DBHClass values to existing data frame
    df2 <- cbind(df, DBH)

    # Divide the TreesPerAcre by 20
    df2$TreesPerAcre <- df2$TreesPerAcre/20

    # reshape from wide to long using the reshape function melt()
    df3 <- melt(df2, id = 1:6)
    # Sort by DBHClass and value within it, output
    with(df3, df3[order(DBHClass, value), ])
  }

HTH,
Dennis

On Wed, Sep 15, 2010 at 10:17 AM, Randy Cass <randynewru...@gmail.com>wrote:

> R Users,
>
> I am new to R and have tried to figure out how to automate this
> process instead of using excel.  I have read in this dataframe into r
> with read.table.  I need to reshape the data from the first table into
> the format of the second table.
>
> TractID StandID Species CruiseDate      DBHClass        TreesPerAcre
> Carbon  Stand 1 Loblolly Pine          5/20/2010        10      1.2
> Carbon  Stand 1 Loblolly Pine          5/20/2010        12      1.2
> Carbon  Stand 1 Loblolly Pine          5/20/2010        14      0.61
> Carbon  Stand 1 Loblolly Pine          5/20/2010        16      0.75
> Carbon  Stand 1 Hard Hardwoods  5/20/2010       6               27.4
> Carbon  Stand 1 Hard Hardwoods  5/20/2010       8       16.4
> Carbon  Stand 1 Hard Hardwoods  5/20/2010       10      16.1
> Carbon  Stand 1 Hard Hardwoods  5/20/2010       12      18.3
> Carbon  Stand 1 Hard Hardwoods  5/20/2010       14      9.9
>
> I want the TreesPerAcre number to be divided evenly (1.2/20) over the
> tenth inch DBHClasses.  For example, A 10 inch DBHClass would range
> from 9.1 to 11.0, the 12 inch class would be from 11.1 to 13.0, etc.
> Any help will be greatly appreciated.
>
> TractID StandID Species CruiseDate      DBHClass        TreesPerAcre
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.1     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.2     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.3     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.4     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.5     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.6     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.7     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.8     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       9.9     0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.0    0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.1    0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.2            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.3            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.4            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.5            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.6            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.7            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.8            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       10.9            0.06
> Carbon  Stand 1 Loblolly Pine   5/20/2010       11.0            0.06
> etc.
>
> Information:
> R  2.11.1
> Windows 7
>
> Thanks in advance,
>
> Randy
>
> ______________________________________________
> R-help@r-project.org mailing list
> 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
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