将数据框从一列重塑为多列

时间:2019-06-18 10:13:35

标签: r

我有以下数据框

> tmp
  Genome value
1      a     1
2      b     2
3      c     3
4      a     3
5      b     3
6      c     2

我尝试过使用dcast,但没有做我想要的事情。 我想要下面的数据框。

  a b c
1 1 2 3    
2 3 3 2 

> dput(tmp)
structure(list(Genome = structure(c(1L, 2L, 3L, 1L, 2L, 3L), .Label = c("a", 
"b", "c"), class = "factor"), value = c(1, 2, 3, 3, 3, 2)), row.names = c(NA, 
-6L), class = "data.frame")

2 个答案:

答案 0 :(得分:1)

使用基数R

unstack(df, value ~ Genome)

 a b c
1 1 2 3
2 3 3 2

答案 1 :(得分:0)

使用data.table(简化了标记集):

library(data.table)
setDT(tmp)

tmpw <- tmp[, dcast(.SD, rowid(Genome) ~ Genome)][, !"Genome"]
tmpw

#    a b c
# 1: 1 2 3
# 2: 3 3 2

或更简明地是Markus指出的:

基础R的替代项(如果数据不规则,可以修改):

data.frame(split(tmp$value, tmp$Genome))

#   a b c
# 1 1 2 3
# 2 3 3 2