【问题标题】:transpose data matrix while keeping values numeric转置数据矩阵,同时保持数值
【发布时间】:2015-09-22 10:55:33
【问题描述】:

我有一组这样的数据

  GSM482075 GSM482076 GSM482077 GSM482078 GSM482079 GSM482080 GSM482081 GSM482082
1   8.79703   8.04291   7.53674   9.94527   8.38775   8.02375   11.1607   10.5481
2   5.66556   6.42794   6.62527   6.19131   5.34138   5.69543    5.9252   5.55675

我想将列转换为行,将行转换为列,但是当我使用 t() 时,它会将数值转换为字符串。

 1         2        
GSM482075 "8.79703" "5.66556"
GSM482076 "8.04291" "6.42794"
GSM482077 "7.53674" "6.62527"
GSM482078 "9.94527" "6.19131"
GSM482079 "8.38775" "5.34138"
GSM482080 "8.02375" "5.69543"
GSM482081 "11.1607" "5.9252" 
GSM482082 "10.5481" "5.55675"

我环顾四周,但没有找到一种简单的方法来保持数字的数字。我正在考虑剥离标签,但除了人们告诉其他人不要这样做之外,我还没有看到任何关于如何做到这一点的答案。有什么建议?谢谢

编辑:显示 str(geomatrixsub) 第一个对象的结果

 'data.frame':  2 obs. of  8 variables:
$ GSM482075: chr  "8.79703" "5.66556"
$ GSM482076: chr  "8.04291" "6.42794"
$ GSM482077: chr  "7.53674" "6.62527"
$ GSM482078: chr  "9.94527" "6.19131"
$ GSM482079: chr  "8.38775" "5.34138"
$ GSM482080: chr  "8.02375" "5.69543"
$ GSM482081: chr  "11.1607" "5.9252"
$ GSM482082: chr  "10.5481" "5.55675"

使用 t(geomatrixsub[1:2,])

      1         2        
GSM482075 "8.79703" "5.66556"
GSM482076 "8.04291" "6.42794"
GSM482077 "7.53674" "6.62527"
GSM482078 "9.94527" "6.19131"
GSM482079 "8.38775" "5.34138"
GSM482080 "8.02375" "5.69543"
GSM482081 "11.1607" "5.9252" 
GSM482082 "10.5481" "5.55675"

【问题讨论】:

  • 你的数据是data.frame吗?试试t(sapply(dat, as.numeric))
  • str(your_data) 的结果好吗?
  • 您的值几乎肯定不是数字,尽管它们看起来是。我猜他们是factor。发布str(x) 的结果,其中x 是您的data.frame
  • 您的数据不是数字!那么为什么通过转置它会神奇地变成数字呢?

标签: r matrix transpose


【解决方案1】:

我知道这里有几种使用 reshape2tidyr 函数的解决方案。我尝试了一个基本的 R 解决方案。就是这样:

 t(dat[1:2, ])
                 1       2
GSM482075  8.79703 5.66556
GSM482076  8.04291 6.42794
GSM482077  7.53674 6.62527
GSM482078  9.94527 6.19131
GSM482079  8.38775 5.34138
GSM482080  8.02375 5.69543
GSM482081 11.16070 5.92520
GSM482082 10.54810 5.55675

我已经使用了提供的数据,使用此代码在 R 中读取,该代码具有数字数据框,但使用矩阵我认为它也应该可以工作:

dat <- read.table(text = " GSM482075 GSM482076 GSM482077 GSM482078 GSM482079 GSM482080 GSM482081 GSM482082
1   8.79703   8.04291   7.53674   9.94527   8.38775   8.02375   11.1607   10.5481
                  2   5.66556   6.42794   6.62527   6.19131   5.34138   5.69543    5.9252   5.55675")

【讨论】:

    【解决方案2】:

    我知道这是一篇旧帖子,但我遇到了同样的问题,我找到了另一种方法。

    dat <- read.table(text = " GSM482075 GSM482076 GSM482077 GSM482078 GSM482079 GSM482080 GSM482081 GSM482082
    1   8.79703   8.04291   7.53674   9.94527   8.38775   8.02375   11.1607   10.5481
                      2   5.66556   6.42794   6.62527   6.19131   5.34138   5.69543    5.9252   5.55675")
    
    dat_t = as.data.frame(x = t(dat), stringsAsFactors = FALSE)
    
    
    > dat_t
                     1       2
    GSM482075  8.79703 5.66556
    GSM482076  8.04291 6.42794
    GSM482077  7.53674 6.62527
    GSM482078  9.94527 6.19131
    GSM482079  8.38775 5.34138
    GSM482080  8.02375 5.69543
    GSM482081 11.16070 5.92520
    GSM482082 10.54810 5.55675
    

    原文出处:https://community.rstudio.com/t/how-to-transpose-data-frame-and-retain-variable-data-types/45843

    【讨论】:

    • OP 说起始数据结构是“数据矩阵”。你的答案——虽然有用——返回一个数据框。
    猜你喜欢
    • 2014-02-11
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2018-07-15
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多