2012-03-08 101 views
0

我有一个文件,我想重塑它以使用R:这些是我正在运行的命令。聚合需要fun.aggregate:默认使用的长度

x <- data.frame(read.table("total.txt", sep=",", header=T) 
y <- melt(x, id=c("Hostname", "Date", "MetricType")) 

当我发出此命令基本上结合日期和小时,我得到一个错误,窗口挂起。

yy <- cast(y, Hostname + Date + variable ~ MetricType) 

这是错误:

Aggregation requires fun.aggregate: length used as default 
     ServerNa Date  MetricType Hour Value 
19502 server1 01/05/2012 MemoryAVG Hour5 41.830000 
19503 server1 01/05/2012 CPUMaximum Hour5 9.000000 
19504 server1 01/05/2012 CPUAVG+Sev Hour5 9.060000 
19505 server1 01/05/2012  CPUAVG Hour5 30.460000 
19506 server1 01/05/2012   61 Hour5 63.400000 
19507 server1 01/05/2012   60 Hour5 59.300000 
19508 server2 01/05/2012 MemoryAVG Hour5 10.690000 
19509 server2 01/05/2012 CPUMaximum Hour5 1.000000 
19510 server2 01/05/2012 CPUAVG+Sev Hour5 0.080000 
19511 server2 01/05/2012  CPUAVG Hour5 1.350000 

是否有一个简单的方法来做到这一点没有悬挂服务器?

当我用库(reshape2)和这样的:

yy <- acast(y, Hostname + Date + variable ~ MetricType, fun.aggregate=mean) 

所有值变成NA。我不知道发生了什么事情?

+0

在第一行有一个右侧缺失。 (和)哪个版本的重塑? – 2012-03-08 16:50:41

+0

'cast'已被'rescast2'中的'dcast'和'acast'取代 – Maiasaura 2012-03-08 17:02:49

+0

我试图使用reshape2和dcast和acast,而不是工作值正在成为NA。有任何想法吗? – 2012-03-08 18:04:59

回答

4

澄清:在下面的讨论中,我指的是dcast()而不是cast()。正如Maiasaura在评论中指出的,来自reshape包的函数cast()已被reshape2包中的两个函数dcast()(用于数据帧输出)和acast()(用于阵列或矩阵输出)替代。在任何情况下,我对fun.aggregate参数的必要性的评论同样适用于cast(),dcast()acast()


错误被抛出,因为在调用分类变量的至少一个组合cast(),您data.frame y必须包含数据的至少两行。作为记录在?cast(或?dcast):

If the combination of variables you supply does not uniquely identify one row in the original data set, you will need to supply an aggregating function, ‘fun.aggregate’.

运行代码下面来看看如何工作的,以及它是如何进行补救。在最后一行代码中,我使用fun.aggregate参数来告诉dcast()使用mean()来组合任何重复变量组合的值。取而代之,您可以放置​​最适合您自己情况的聚合功能。

library(reshape2) 

## A toy dataset, with one row for each combination of variables 
d <- expand.grid(Hostname = letters[1:2], 
       Date = Sys.Date() + 0:1, 
       MetricType = LETTERS[3:4]) 
d$Value <- rnorm(seq_len(nrow(d))) 

## A second dataset, in which one combination of variables is repeated 
d2 <- rbind(d, d[1,]) 

## Runs without complaint 
dcast(d, Hostname + Date ~ MetricType) 

## Throws error asking for an aggregation function 
dcast(d2, Hostname + Date ~ MetricType) 

## Happy again, with a supplied aggregation function 
dcast(d2, Hostname + Date ~ MetricType, fun.aggregate=mean) 
+0

找不到dcast,我控制了它,但仍然挂起: – 2012-03-08 17:55:40

+0

我应该澄清一下:'reshape'包中的'cast()'已被弃用,并且被'dcast()'取代(当需要数据时。帧输出)和'acast()'(当你想要数组或矩阵输出时)。要找到'dcast',你需要先做:'install.packages(“reshape2”);库(reshape2)'。但是,更大的问题是,您是否尝试在'fun.aggregate'参数中为'cast()'提供函数的名称。它应该与'cast()'一起工作,就像它已经替换它的'dcast'和'acast'函数一样...... – 2012-03-08 18:07:07

+0

我已经安装了reshape2并尝试过了。当我使用这个yy < - dcast(y,主机名+日期+变量~MetricType,意思是) 所有的值都变成NA – 2012-03-08 18:12:40