2013-02-21 40 views
0

多个列我有这样密度为在一个时间中的R

V1 V2 V3 V4.............V60 
11 22 33 44.............89 
21 98 22 33.............09 
33 44 55 78.............20 

上述文件的输入文件具有超过3000行,每行中的60列。

当我试图在我的[R提示符下使用density(data, kernel="gaussian", bw=15),它产生一个错误说

Error in density.default(data) : argument 'x' must be numeric 

但是,当我尝试density(data$V1, kernel="gaussian", bw=15),它工作正常。

我想知道是否有一个命令来计算整个文件的密度,而不是为每一个列执行60次。

+1

你想要60个密度或1个单一密度组合吗? – csgillespie 2013-02-21 17:14:12

+0

您好@csgillespie,我确实需要所有60个密度的3000个记录。是否有办法为每个值生成密度?我的意思是可以生成另一个输出文件,其中包含类似于我的输入文件的密度?对于非常基本的问题抱歉,因为我来自生物学背景。 – 2013-02-21 17:18:17

回答

1

您可能正在寻找sapplyapply
可以使用

apply(myDataName, 2, density, kernel="gaussian", bw=15) 

如果你的列factor s,而不是numeric,你需要将这些先转换。

+0

谢谢@Ricardo。但是,价值2是否意味着什么?您的代码正在生成60个密度。有用。但是,我也想知道输入文件中的每个值,有没有办法获得密度? – 2013-02-21 17:20:46

+0

是的,'2'指的是列或更具体的第二维(相当于从dim(x)'中返回的信息的顺序)。关于apply的更多信息请查看'?apply',你也可以在这里搜索,因为这里有很多关于'* apply'函数 – 2013-02-21 18:01:05

+0

@jsmith的问题,关于你的问题的第二部分:你是如何特别定义“每个值”? – 2013-02-21 18:01:39

0

很有可能您的data对象是数据框(当使用read.tableread.csv等工具读取数据时,这是默认设置)。

如果要处理每列(为每列创建一个单独的密度图),则可以使用lapply函数。

如果你想要基于所有数据的单一密度(列不代表任何内容),那么你可以使用unlist函数将它全部转换为一个大向量。更好的做法可能是使用scan函数代替read.table将数据加载到一个向量中,然后一起跳过数据帧。

+0

谢谢@Greg。但是里卡多的上述应用指令给出了60个密度。我想知道在每个值下计算密度的可能性。所以,我的密度文件将携带与我的输入文件相同的数据格式。 – 2013-02-21 17:26:15

+0

@jsmith,你想要每行的密度?在这种情况下,你可以像上面那样使用'apply',只需要使用1而不是2。 – 2013-02-22 04:27:54