【问题标题】:How to melt a selected single column in a data frame如何融化数据框中选定的单列
【发布时间】:2016-01-22 03:13:16
【问题描述】:

使用此代码:

dat <- structure(list(Probes = structure(1:6, .Label = c("1415670_at",
"1415671_at", "1415672_at", "1415673_at", "1415674_a_at", "1415675_at"
), class = "factor"), Genes = structure(c(2L, 1L, 4L, 5L, 6L,
3L), .Label = c("Atp6v0d1", "Copg1", "Dpm2", "Golga7", "Psph",
"Trappc4"), class = "factor"), FOO = c(1.133, 1.068,
1.01, 0.943, 1.048, 1.053)), .Names = c("Probes", "Genes", "FOO"
), row.names = c(NA, 6L), class = "data.frame")

我创建了以下数据框:

        Probes    Genes   FOO
1   1415670_at    Copg1 1.133
2   1415671_at Atp6v0d1 1.068
3   1415672_at   Golga7 1.010
4   1415673_at     Psph 0.943
5 1415674_a_at  Trappc4 1.048
6   1415675_at     Dpm2 1.053

我想要做的是选择最后一列并将其融化成这样:

FOO 1.133 
FOO 1.068 
FOO 1.010 
FOO 0.943 
FOO 1.048 
FOO 1.053

我该怎么做?

我被这段代码卡住了:

library(reshape2)
melt(dat[,ncol(dat)])

【问题讨论】:

  • 预期输出是什么?有 2 列的 data.frame?具有 1 列 + 行名称的 data.frame?还有什么?

标签: r reshape melt


【解决方案1】:

选择“FOO”列后,我们可以使用stack

stack(dat['FOO'])

或者

melt(dat['FOO'])

dat[,'FOO'] 不是data.frame。这是一个vector。我们可以在?Extract 中找到[[[ 等之间的区别。当只有一列时,[ 的默认选项是drop=TRUE。如果我们使用, 来指定行索引,我们可以指定drop=FALSE

stack(dat[, "FOO", drop=FALSE])

如果我们不知道列名,就用ncol

stack(dat[ncol(dat)])

区别在于我们如何使用它和返回的对象。

【讨论】:

  • 假设我不知道'FOO',我只想选择最后一列。如何修改您的代码以使用索引。
  • @neversaint 还请注意,堆栈适用于字符和数字或组合,但不适用于您在示例中的因素
  • @rawr - 我可能会添加它真的很明智 - 不允许组合可能看起来相同但意味着完全不同的事物的分类值是一个明智的设计选择。
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多