Convert data frame common rows to columns

后端 未结 5 1391
时光取名叫无心
时光取名叫无心 2020-12-10 21:53

Say I have a data frame where one column is some repeating value (dates, IDs, etc). Is there a way to convert a data frame into a now data frame with columns instead of rep

相关标签:
5条回答
  • 2020-12-10 21:59
    a <- c(rep(1:10, 3))
    b <- c(rep("aa", 10), rep("bb", 10), rep("cc", 10))
    set.seed(123)
    c <- sample(seq(from = 20, to = 50, by = 5), size = 30, replace = TRUE)
    d <- data.frame(a,b, c)
    #how to transpose it#
    e<-reshape(d,idvar='a',timevar='b',direction='wide')
    e
    
    0 讨论(0)
  • 2020-12-10 22:02

    With split and cbind:

    > ll = lapply(split(d, d$b), function(x) x[3])
    > dd = do.call(cbind, ll)
    > names(dd) = names(ll)
    > dd
       aa bb cc
    1  30 50 50
    2  45 35 40
    3  30 40 40
    4  50 40 50
    5  50 20 40
    6  20 50 40
    7  35 25 35
    8  50 20 40
    9  35 30 30
    10 35 50 25
    
    0 讨论(0)
  • 2020-12-10 22:05

    If there are always equal numbers of observations in each group, this would be very easy with split then as.data.frame

    as.data.frame(split(d$c, d$b))
    #    aa bb cc
    # 1  30 50 50
    # 2  45 35 40
    # 3  30 40 40
    # 4  50 40 50
    # 5  50 20 40
    # 6  20 50 40
    # 7  35 25 35
    # 8  50 20 40
    # 9  35 30 30
    # 10 35 50 25
    
    0 讨论(0)
  • 2020-12-10 22:12

    This is also a case in which you can use unstack:

    unstack(d, c ~ b)
    #    aa bb cc
    # 1  30 50 50
    # 2  45 35 40
    # 3  30 40 40
    # 4  50 40 50
    # 5  50 20 40
    # 6  20 50 40
    # 7  35 25 35
    # 8  50 20 40
    # 9  35 30 30
    # 10 35 50 25
    
    0 讨论(0)
  • 2020-12-10 22:15

    Using your data frame d,

    library(tidyr)
    > spread(d, key = b, value = c)
        a aa bb cc
    1   1 30 50 50
    2   2 45 35 40
    3   3 30 40 40
    4   4 50 40 50
    5   5 50 20 40
    6   6 20 50 40
    7   7 35 25 35
    8   8 50 20 40
    9   9 35 30 30
    10 10 35 50 25
    

    Explanation, the argument key = b lets you specify a column in your data frame. spread will create a new column for each unique entry in the key column b. The argument value = c tells spread to retrieve the value in column c and write it in the corresponding new key column.

    0 讨论(0)
提交回复
热议问题