【问题标题】:construct a data frame in R from combining information of two columns通过组合两列的信息在 R 中构造一个数据框
【发布时间】:2013-12-05 02:43:28
【问题描述】:

我有一个由两列组成的数据框:true.de.statusdecision.de。数据集可重现如下:

dat = structure(c(0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 
0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), .Dim = c(100L, 
2L), .Dimnames = list(NULL, c("true.de.status", "decision.de"
)))

dat 的前几行是:

       true.de.status decision.de
  [1,]              0           0
  [2,]              0           0
  [3,]              1           1
  [4,]              0           1
  [5,]              1           0
  [6,]              0           0
  [7,]              1           1
  [8,]              1           0

现在我希望用 x 轴绘制基因数(即dat 中的总行数)和 y 轴真实阳性数的图。 x 轴很容易确定:seq(0,100) 会给我 0、1、...、100 个基因。对于 y 轴,我需要根据 true.de.statusdecision.de 这两列进行计算:当我遍历每一行时,我可以随着基因(行)数量的增加计算真正的阳性。例如,

first 1 gene included: True positive (TP) = 0
first 2 genes included: TP = 0
first 3 genes included: TP = 1 (since both columns have 1 and they match)
first 4 genes included: TP = 1 (`decision.de` is 1, but `true.de.status` is 0, so it is a false positive)
first 5 genes included: TP = 1 (two columns don't match)
......

有没有一种简单的方法来操作dat 数据框,并返回一个与dim(dat)[1] 长度相同的向量以及真阳性的数量?谢谢!

【问题讨论】:

  • 我们很清楚,这不是一个数据框,而是一个矩阵。这就是为什么我需要使用“[”而不是“$”来访问它的列。

标签: r


【解决方案1】:

看看这是你想要的吗:

plot( cumsum( dat[ , "true.de.status"] == 1 &
              dat[ , "decision.de"] == 1) , 
      type="s")

(默认情况下,x值将是1:100。如果您想要的点或行,您可以更改类型参数。显然您可以使用vec <- ...分配umsum值为名称)

【讨论】:

    【解决方案2】:

    看起来像你想要的

    df <- as.data.frame(dat)
    df$TP <- cumsum(as.numeric(df$true.de.status == 1 & df$decision.de == 1))
    

    这将返回两列都为 1 且匹配的实例的累积计数。

    【讨论】:

    • 也许 OP 想要你的 TP 的cumsum
    • 谢谢!我想知道为什么他提供的最后两个例子被视为真正的阳性......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多