【问题标题】:R_transforming raw data to column dataR_将原始数据转换为列数据
【发布时间】:2014-04-25 09:33:21
【问题描述】:

我有一个数据框 df

 > df<-data.frame(a=letters[1:5], b=1:5, c=LETTERS[1:5])
 > df
   a  b c
1  a  1 A
2  b  2 B
3  c  3 C
4  d  4 D
5  e  5 E

我想从上面的数据框中创建一个新的数据框,其中只有应该像这样的列

> df1
   a
1  a
2  1
3  A
4  b
5  2
6  B
7  c
8  3
9  C
.....

我尝试了以下

> df1<-data.frame(c(df[1,],df[2,],df[3,]))
> df1
  a b c a.1 b.1 c.1 a.2 b.2 c.2
1 a 1 A   b   2   B   c   3   C

但结果是行矩阵,实际上我有数百列和行应该转换为一列。我该怎么做?

【问题讨论】:

    标签: r transform


    【解决方案1】:
    > data.frame(a = matrix(apply(df, 1, c), ncol = 1))
    ##    a
    ## 1  a
    ## 2  1
    ## 3  A
    ## 4  b
    ## 5  2
    ## 6  B
    ## 7  c
    ## 8  3
    ## 9  C
    ## 10 d
    ## 11 4
    ## 12 D
    ## 13 e
    ## 14 5
    ## 15 E
    

    这里有另外几个选项,

    > data.frame(a = do.call(rbind, as.list(t(df))))
    ## or
    > data.frame(a = c(apply(df, 1, c)))
    

    as.vectoras.matrix 也可以在上面的 apply 调用中代替 c

    【讨论】:

    • 而不是apply(df, 1, c),使用t(df) 稍微快一些。
    • 我想知道使用data.table 是否会更快...类似library(data.table); data.frame(a = matrix(data.table(df)[,t(.SD)], ncol = 1)) 你应该在你的大数据集上进行基准测试
    • 感谢@Richard Scriven 和@shadow。两者都可以正常工作。
    • @Richard Scriven capply(df, 1, c) 中调用的函数是如何工作的?
    • 它连接一个向量。你也可以在那里使用as.vectoras.matrix
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多