[R] sum on column using apply

David Winsemius dwinsemius at comcast.net
Mon Apr 26 05:47:09 CEST 2010


On Apr 25, 2010, at 11:30 PM, robert lee wrote:

> Wanted to thank David and Jim for the str.   The x and y were  
> created using the function below.  In one case, reshape1 returned  
> list and other data frame.   I put the fix by putting the  
> as.data.frame below

I hope you are making progress on your own, because you are using non- 
base functions and not telling us where they came from and still have  
not offered the requested information from the last post. I cannot see  
where you made any assignments to x or y, so I am in the dark  
entirely. Read the Posting Guide, indicate where non-base functions  
come from and post more details if you want more help.

(And learn to post in plain text, please, as noted in Posting Guide.)

-- 
David.
>
> myPivot <- function(y,x,z,m, ...){
>
>   m1 <- m[c(x,y,z)] # select the the columns wanted
>
>   m2 <- melt(m1, id=c(y,x))
>
>   pivot <- as.data.frame(reshape1(m2,list(y,x))) # time , cpu, idl
>
> # hack below as pivot[y] does not work.  need to research
>
>   row.names(pivot) <- pivot$time # put the time as the row names
>
>   pivot <- pivot[,2:dim(pivot)[2]] # remove time from column
>
>   return(as.data.frame(pivot))
> }
>
> On Apr 25, 2010, at 11:07 PM, David Winsemius wrote:
>
>>
>> On Apr 25, 2010, at 10:15 PM, robert lee wrote:
>>
>>> I have two data frames ( x and y -- sample values below).  The  
>>> rows have HH:MM:SS and columns have names of devices.
>>>
>>> I am trying to find a list of 5 least used devices during recorded  
>>> time period.  When apply function is used to sum on the column, I  
>>> get the correct answer on data frame called x, but not for y.  The  
>>> data type of return answer is different and I cannot figure out  
>>> why.   Any insight into what is happening of possibly different  
>>> simpler ways to do this would be appreciated.
>>>
>>>> colnames(t(sort(apply(x,2,sum))[1:5]))
>>> [1] "5x"   "6x"   "7x"   "4x"   "103x"
>>
>> Why are you getting colnames on the transpose of x?
>>>
>>> # the above returns the answer I am trying to get
>>>
>>>> colnames(t(sort(apply(y,2,sum))[1:5]))
>>> NULL
>>
>> Again. Why get colnames on transpose?
>>
>>>
>>> # the above does not
>>>
>>> below is sample data and output of the apply for each
>>>
>>>> x
>>>        0x 1x 2x 3x 4x 5x 6x 7x 32x 33x 34x 35x 36x 37x 38x 39x 64x  
>>> 65x 66x 67x 68x
>>> 13:55:24 21 18 18 18 17 16 16 17  29  29  25  23  19  18  18  21   
>>> 24  22  22  21  20
>>> 13:55:54 16  3  3  4  4  1  1  6  40  29  16   9   6  23  19  21   
>>> 27  19  29  15  19
>>> 13:56:24  3  2  6  2  1  1  4  1  33  40  28  13  10   2   4  15   
>>> 25  17   8  14  11
>>> [ truncated .... ]
>>
>> You have not told us how you constructed "x" and it is undoubtedly  
>> important. We probably need at the very least the results of str(x)  
>> and str(y). This looks like a zoo object which is not a data.frame.
>>
>>
>>>
>>>> apply(x,2,sum)
>>>  0x    1x    2x    3x    4x    5x    6x    7x   32x   33x   34x    
>>> 35x   36x   37x
>>> 12042 11411 11343 11237 10937 10811 10909 10911 18341 16055 14406  
>>> 13770 12252 12003
>>> 38x   39x   64x   65x   66x   67x   68x
>>> 12266 13450 15426 14163 13913 13615 12972
>>
>> So where did these extra columns come from>
>>
>>> 69x   70x   71x   96x   97x   98x   99x
>>> 12656 13089 13329 12671 12562 12336 12045
>>> 100x  101x  102x  103x
>>> 11476 11212 11066 10997
>>>
>>>> y
>>>        nfs6 sd0 sd1 sd30 sd31 sd36 sd6 ssd100 ssd101 ssd102 ssd103  
>>> ssd104 ssd105
>>> 13:55:54    0   2   0    0    0    0   0      0      0      0       
>>> 0      0      0
>>> 13:56:54    0   3   0    0    0    0   0      0      0      0       
>>> 0      0      0
>>> 13:57:54    0   1   0    0    0    0   0      0      0      0       
>>> 0      0      0
>>> 13:58:54    0   1   0    0    0    0   0      0      0      0       
>>> 0      0      0
>>> [ truncated .... ]
>>
>> This might or might not be a data.frame. Doing a transpose on a  
>> data.frame might have the side-effect of NULLing out the resulting  
>> colnames.
>>>
>>>> apply(y,2,sum)
>>> [1]    0  515    0    0    0    0    0   96    0    0    0   90     
>>> 0    0    0    0
>>> [17]    0    1   13   96    0   31    0    0    0    0    0     
>>> 0    0    0   11    0
>>> [33]    0    0   12    0    0    0    0    0    0    0   16     
>>> 0    0    0    0    0
>>> [49]   31    0    0    0    0    0    0    0    0   10    0     
>>> 0    0    0    0    0
>>> [65]    0    0    7    0    0   84  337  642 1005    0  605   
>>> 518    0    0    5    0
>>> [81]    0   86  335  646 1014    0  606  513    0  737  418  306   
>>> 277  607  301  410
>>> [97] 1690  445  432    0  738  424  315  283  608  302  411 1688   
>>> 446  431    0    0
>>> [113]    0    0    0   93    0    0    0    0    0    1   12     
>>> 0    0
>>>>
>>> ______________________________________________
>>> R-help at 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.
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list