【问题标题】:change data.frame column into rows in R将data.frame列更改为R中的行
【发布时间】:2011-09-08 01:47:54
【问题描述】:
A <- c(1,6)
B <- c(2,7)
C <- c(3,8)
D <- c(4,9)
E <- c(5,0)
df <- data.frame(A,B,C,D,E)
df
  A B C D E
1 1 2 3 4 5
2 6 7 8 9 0

我想要这个:

df
   1  2
A  1  6 
B  2  7
C  3  8
D  4  9    
E  5  0

【问题讨论】:

  • 您是如何通过这种方式将数据导入 R 的?

标签: r rows dataframe


【解决方案1】:

如果您的数据框确实是这种格式,那么您的所有向量都将是字符向量。或者,你基本上有一个字符矩阵,你可以这样做:

data.frame(t(df))

不过,最好从一开始就按照你想要的方式定义它

df <- data.frame(c('A','B','C','D','E'), 
                 c(1, 2, 3, 4, 5),
                 c(6, 7, 8, 9, 0))

你也可以这样做

df <- data.frame(LETTERS[1:5], 1:5, c(6:9, 0))

如果你想给列名,你可以这样做

df <- data.frame(L = LETTERS[1:5], N1 = 1:5, N2 = c(6:9, 0))

有时,如果我使用 Excel 数据的 read.DIF,数据会被转置。你是这样获取原始数据的吗?如果是这样,你可以打电话

read.DIF(filename, transpose = T)

以正确的方向获取数据。

【讨论】:

  • 应该说as.data.frame(t(df))。它不在“字符”模式下。
【解决方案2】:

我真的推荐 data.table 无需手动步骤的方法,因为它们容易出错

A <- c(1,6)
B <- c(2,7)
C <- c(3,8)
D <- c(4,9)
E <- c(5,0)
df <- data.frame(A,B,C,D,E)
df

library('data.table')
dat.m <- melt(as.data.table(df, keep.rownames = "Vars"), id.vars = "Vars") # https://stackoverflow.com/a/44128640/54964

dat.m

输出

  A B C D E
1 1 2 3 4 5
2 6 7 8 9 0
    Vars variable value
 1:    1        A     1
 2:    2        A     6
 3:    1        B     2
 4:    2        B     7
 5:    1        C     3
 6:    2        C     8
 7:    1        D     4
 8:    2        D     9
 9:    1        E     5
10:    2        E     0

R:3.4.0(向后移植)
操作系统:Debian 8.7

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2020-11-05
    • 2014-12-15
    • 2022-01-02
    • 2016-08-30
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多