如何将R中的数据按以下格式堆叠?

如何将R中的数据按以下格式堆叠?,r,R,我有一个数据框,看起来像这样: inten new.probes 12.28280 AFFX-r2-P1-cre-5_at 12.35039 AFFX-r2-P1-cre-5_at 12.38397 AFFX-r2-P1-cre-5_at 12.36304 AFFX-r2-P1-cre-5_at 12.16271 AFFX-r2-P1-cre-5_at 12.70304 AFFX-r2-P1-cre

我有一个数据框,看起来像这样:

  inten      new.probes
  12.28280      AFFX-r2-P1-cre-5_at
  12.35039      AFFX-r2-P1-cre-5_at
  12.38397      AFFX-r2-P1-cre-5_at
  12.36304      AFFX-r2-P1-cre-5_at
  12.16271      AFFX-r2-P1-cre-5_at
  12.70304      AFFX-r2-P1-cre-3_at
  12.28280      AFFX-r2-P1-cre-3_at
  12.35039      AFFX-r2-P1-cre-3_at
  12.38397      AFFX-r2-P1-cre-3_at
  12.36304      AFFX-r2-P1-cre-3_at
  12.16271      AFFX-r2-P1-cre-2_at
  12.70304      AFFX-r2-P1-cre-2_at 
  12.16271      AFFX-r2-P1-cre-2_at
  12.70304      AFFX-r2-P1-cre-2_at
(以上为两列形式,一列为PROBENAME,另一列为信号强度值) 我希望数据帧按以下方式转换:

AFFX-r2-P1-cre-5_at 12.28280 12.35039  12.38397  12.36304   12.16271 
AFFX-r2-P1-cre-3_at 12.28280 12.35039  12.38397  12.36304   12.16271 
AFFX-r2-P1-cre-2_at 12.38304 12.36304  12.38397  12.16271   12.70304

欢迎提出任何建议。这是一个很大的数据集,我只提供了其中的一小部分以寻求帮助。

如果您对
new.probe的值有相同数量的元素,您可以使用:

do.call(rbind, unstack(dat))
                        [,1]     [,2]     [,3]     [,4]     [,5]
AFFX-r2-P1-cre-2_at 12.16271 12.70304 12.16271 12.70304 12.16271
AFFX-r2-P1-cre-3_at 12.70304 12.28280 12.35039 12.38397 12.36304
AFFX-r2-P1-cre-5_at 12.28280 12.35039 12.38397 12.36304 12.16271
Warning message:
In function (..., deparse.level = 1)  :
  number of columns of result is not a multiple of vector length (arg 1)
但这显然是错误的-您需要用
NA
填充较短的向量:

x <- unstack(dat)
m <- max(sapply(x, length))
do.call(rbind, lapply(x, function(x)c(x, rep(NA, m-length(x)))))

                        [,1]     [,2]     [,3]     [,4]     [,5]
AFFX-r2-P1-cre-2_at 12.16271 12.70304 12.16271 12.70304       NA
AFFX-r2-P1-cre-3_at 12.70304 12.28280 12.35039 12.38397 12.36304
AFFX-r2-P1-cre-5_at 12.28280 12.35039 12.38397 12.36304 12.16271

x如果
new.probe的值具有相同数量的元素,则可以使用:

do.call(rbind, unstack(dat))
                        [,1]     [,2]     [,3]     [,4]     [,5]
AFFX-r2-P1-cre-2_at 12.16271 12.70304 12.16271 12.70304 12.16271
AFFX-r2-P1-cre-3_at 12.70304 12.28280 12.35039 12.38397 12.36304
AFFX-r2-P1-cre-5_at 12.28280 12.35039 12.38397 12.36304 12.16271
Warning message:
In function (..., deparse.level = 1)  :
  number of columns of result is not a multiple of vector length (arg 1)
但这显然是错误的-您需要用
NA
填充较短的向量:

x <- unstack(dat)
m <- max(sapply(x, length))
do.call(rbind, lapply(x, function(x)c(x, rep(NA, m-length(x)))))

                        [,1]     [,2]     [,3]     [,4]     [,5]
AFFX-r2-P1-cre-2_at 12.16271 12.70304 12.16271 12.70304       NA
AFFX-r2-P1-cre-3_at 12.70304 12.28280 12.35039 12.38397 12.36304
AFFX-r2-P1-cre-5_at 12.28280 12.35039 12.38397 12.36304 12.16271

x这就是我解决这个问题的方法:

  • 确保
    new.probe
    变量已排序
  • 使用
    sequence()
    rle()
    为每个
    new.probe
    生成一个“时间”变量
  • 使用
    重塑()
    转换数据
  • 下面是一个使用示例数据的工作示例(假设它名为“DF”)

    或者,如果您更喜欢
    restrape2
    中的语法而不是基本R的
    restrape
    ,请将步骤3替换为:

    require(reshape2)
    dcast(DF, new.probes ~ time, value.var = "inten")
    

    这就是我处理这个问题的方法:

  • 确保
    new.probe
    变量已排序
  • 使用
    sequence()
    rle()
    为每个
    new.probe
    生成一个“时间”变量
  • 使用
    重塑()
    转换数据
  • 下面是一个使用示例数据的工作示例(假设它名为“DF”)

    或者,如果您更喜欢
    restrape2
    中的语法而不是基本R的
    restrape
    ,请将步骤3替换为:

    require(reshape2)
    dcast(DF, new.probes ~ time, value.var = "inten")
    

    你试过什么吗??有代码吗?每个探针都有5个值吗?你试过什么吗??有代码吗?每个探针总是有5个值吗?我总是有53个值,大约22800个probes@DhivyaaReddy在这种情况下,
    do.call(rbind,unstack(dat))
    应该可以正常工作。@Andrie,我喜欢你的解决方案,但这给我的印象是另一个
    restrape()
    问题,但缺少“时间”。看,当然,我错过了一条评论,说它们总是有相同数量的值,在这种情况下,这是正确的选择!我总是有53个值,大约22800个probes@DhivyaaReddy在这种情况下,
    do.call(rbind,unstack(dat))
    应该可以正常工作。@Andrie,我喜欢你的解决方案,但这给我的印象是另一个
    restrape()
    问题,但缺少“时间”。看,当然,我错过了一条评论,说它们总是有相同数量的值,在这种情况下,这是正确的选择!