【问题标题】:Density for multiple columns at a time in rr中一次多列的密度
【发布时间】:2013-02-21 17:09:47
【问题描述】:

我有一个这样的输入文件

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 次。

【问题讨论】:

  • 你想要60个密度还是1个单一组合密度
  • 嗨@csgillespie,我确实需要 3000 条记录的全部 60 个密度。有没有办法为每个值生成密度?我的意思是可以生成另一个包含类似于我的输入文件的密度的输出文件吗?由于我来自生物学背景,因此很抱歉提出非常基本的问题。

标签: r


【解决方案1】:

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

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

如果您的列是factors 而不是numeric,则需要先转换它们。

【讨论】:

  • 谢谢@Ricardo。但是,值 2 是否意味着上述任何内容?您的代码正在生成 60 个密度。有用。但是,我也想知道对于输入文件中的每个值,有没有办法获得密度?
  • 是的,2 指的是列,或更具体地指的是第二维(相当于您从dim(x) 返回的信息的顺序)。有关申请的更多信息,请查看?apply,您也可以在这里搜索,因为这里有很多关于*apply 功能的问题
  • @jsmith,回答您问题的第二部分:您如何具体定义“每个值”?
  • @jsmith,阅读您对 csgillespie 的评论,也许您确实想要 1 个单密度?
  • 嗨@Ricardo,这是我所期待的。以下将是我的密度输出文件 V1 V2 V3 V4.............V60 D11 D21 D31 D41.............D601 D12 D22 D32 D42.. .........D602 希望这会有所帮助
【解决方案2】:

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

如果您想处理每一列(为每一列创建单独的密度图),那么您可以使用lapply 函数。

如果您想要基于所有数据的单一密度(列没有任何意义),那么您可以使用unlist 函数将其全部转换为一个大向量。最好使用scan 函数而不是read.table 将数据加载到一个向量中开始并一起跳过数据帧。

【讨论】:

  • 谢谢@Greg。但是里卡多的上述应用命令给出了 60 个密度。我想知道在每个值处计算密度的可能性。因此,我的密度文件将携带与我的输入文件相同的数据格式。
  • @jsmith,你想要每行的密度吗?在这种情况下,您可以像上面一样使用apply,只需使用 1 而不是 2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2013-08-18
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多