Skip to content

Truncating based on attribute range and serial no

3 messages · PDXRugger, Marc Schwartz, Jorge Ivan Velez

#
COnsider the following:

Age<-c(48, 57, 56, 76, 76, 66, 70, 14,  7,  3, 62, 62, 30, 10,  7, 53, 44,
29, 46, 47, 15, 13, 84, 77, 26)

SerialNo<-c(001147, 005979, 005979, 006128, 006128, 007004, 007004, 007004,
007004, 007004, 007438, 007438,009402,009402, 009402, 012693, 012693,
012693, 014063,014063, 014063, 014063, 014811, 014811,016570)

TestSet<-cbind(Age,SerialNo)

TestSet<-data.frame(TestSet)

I am looking to create a third column titled "IsHead".  This column would be
either TRUE or FALSE depending on whether the Age variable was the greatest
for that set of SerialNo's.  So for the above i would return:  

Age	SerialNo  IsHead
48	1147          TRUE
57	5979          TRUE
56	5979          FALSE
76	6128          TRUE
76	6128           FALSE
66	7004          FALSE
70	7004          TRUE
14	7004          FALSE 
7	7004          FALSE
3	7004          FALSE

I am thinking this is simple but cannot get my own code to work.  Thanks for
any insights.  

JR
#
On Aug 3, 2009, at 2:04 PM, PDXRugger wrote:

            
Try this:

 > TestSet
    Age SerialNo
1   48     1147
2   57     5979
3   56     5979
4   76     6128
5   76     6128
6   66     7004
7   70     7004
8   14     7004
9    7     7004
10   3     7004
11  62     7438
12  62     7438
13  30     9402
14  10     9402
15   7     9402
16  53    12693
17  44    12693
18  29    12693
19  46    14063
20  47    14063
21  15    14063
22  13    14063
23  84    14811
24  77    14811
25  26    16570


# See ?ave for more information
# As implemented, this will work for integer values of Age

TestSet$IsHead <- as.logical(ave(TestSet$Age,
                                  TestSet$SerialNo,
                                  FUN = function(x) x == max(x)))


 > TestSet
    Age SerialNo IsHead
1   48     1147   TRUE
2   57     5979   TRUE
3   56     5979  FALSE
4   76     6128   TRUE
5   76     6128   TRUE
6   66     7004  FALSE
7   70     7004   TRUE
8   14     7004  FALSE
9    7     7004  FALSE
10   3     7004  FALSE
11  62     7438   TRUE
12  62     7438   TRUE
13  30     9402   TRUE
14  10     9402  FALSE
15   7     9402  FALSE
16  53    12693   TRUE
17  44    12693  FALSE
18  29    12693  FALSE
19  46    14063  FALSE
20  47    14063   TRUE
21  15    14063  FALSE
22  13    14063  FALSE
23  84    14811   TRUE
24  77    14811  FALSE
25  26    16570   TRUE


HTH,

Marc Schwartz