保持数值不变的情况下转置数据矩阵

3

我有一组数据,就像这样

  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"

using 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"

1
你的数据是一个数据框吗?尝试使用t(sapply(dat, as.numeric)) - Rorschach
2
请问 str(your_data) 的结果是什么? - Ben Bolker
5
你的价值观很可能一开始就不是数字,尽管它们看起来像是。我的猜测是它们是“因子”。请在x为你的数据框时发表str(x)的结果。 - BrodieG
1
https://dev59.com/5V4b5IYBdhLWcg3wnCpy - ExperimenteR
1
你的数据不是数字!那么为什么通过转置它会神奇地变成数字呢? - David Arenburg
是的,我想它最初是非数字的,所以LegalizeIt的解决方案似乎起作用了。谢谢。 - A D
2个回答

2

我知道有一些解决方案使用 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")

0

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

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


原帖提到起始数据结构是“数据矩阵”。你的回答虽然有用,但返回的是数据框。 - jubilatious1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接