【问题标题】:data frame manipulation by factor levels [duplicate]按因子水平处理数据框[重复]
【发布时间】:2016-07-19 02:02:21
【问题描述】:

这可能是一个新手问题,但我到处搜索,找不到解决方法。我在 R 中有一个如下所示的数据框:

Target Sample Regulation
AKT1    00h    1.00000
AKT1    02h    1.27568
AKT1    06h   -1.29813
AKT1    12h    1.12357
AKT1    48h    1.02284
AKT2    00h    1.00000
AKT2    02h    1.08692
AKT2    06h    1.19489
AKT2    12h   -1.07677
AKT2    48h   -1.18955

data$Target 和 data$Sample 是 class=factor

我需要创建一个如下所示的表格:

Target/Sample  AKT1     AKT2
00h            1.00000  1.00000
02h            1.27568  1.08692
06h           -1.29813  1.19489
12h            1.12357 -1.07677
48h            1.02284 -1.18955

换句话说,我需要创建一个新的数据框,其中列是 data$Target 级别,行是 data$Sample 级别,并使用 data$Regulation 中的相应值填充它。

这是我能想到的:

newdata <- data.frame(Time=levels(data$Sample),
AKT1=as.numeric(data$Regulation[which(dat$Target=="AKT1",)]))

但我当然不想一一进行,因为 dat$Target 有 >100 个级别(基因)。请帮忙!

非常感谢大家!

【问题讨论】:

标签: r


【解决方案1】:

您需要从长格式转换为宽格式。这是使用reshape 的替代方法:

reshape(df, idvar = "Sample", timevar = "Target", direction = "wide")
  Sample Regulation.AKT1 Regulation.AKT2
1    00h         1.00000         1.00000
2    02h         1.27568         1.08692
3    06h        -1.29813         1.19489
4    12h         1.12357        -1.07677
5    48h         1.02284        -1.18955

【讨论】:

  • 正是我需要的。非常感谢!
  • @user3803664 不客气 :-)
  • @user3803664 - 或者使用reshape2 - reshape2::dcast(data, Sample ~ Target, value.var = "Regulation")。见reshape vs. reshape2
【解决方案2】:

我们可以使用tidyr

library(tidyr)
spread(df1, Target, Regulation)
#  Sample     AKT1     AKT2
#1    00h  1.00000  1.00000
#2    02h  1.27568  1.08692
#3    06h -1.29813  1.19489
#4    12h  1.12357 -1.07677
#5    48h  1.02284 -1.18955

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多