如何拆分R中的列?

时间:2015-10-08 04:40:45

标签: r split

任何人都知道如何将列拆分为多个列? 例如:我想拆分列&#34;得分&#34;和&#34; class&#34;,然后制作列&#34;等级&#34;的值作为列名。在我的数据中,我在<#34;等级&#34;列中有 50个不同的值。而不是下面的例子中只有两个。 在数据框2中,行名称是列&#34; class&#34;的值。在数据框1中。

数据框1

class   grade   score
A          a    12
B          a    45
C          a    75
D          a    18
E          a    6
A          b    45
B          b    92
C          b    78
D          b    36
E          b    39

数据框2

    a   b
A   12  45
B   45  92
C   75  78
D   18  36
E   6   39

3 个答案:

答案 0 :(得分:4)

Base R&#39; s unstack开箱即用:

unstack(df, score ~ grade)
#   a  b
#1 12 45
#2 45 92
#3 75 78
#4 18 36
#5  6 39

xtabs一样:

as.data.frame.matrix(xtabs(score ~ class + grade, data=df))

#   a  b
#A 12 45
#B 45 92
#C 75 78
#D 18 36
#E  6 39

答案 1 :(得分:2)

library(reshape2)

dcast(df, class ~ grade, value.var = "score")
  class  a  b
1     1 12 45
2     2 45 92
3     3 75 78
4     4 18 36
5     5  6 39

df <- structure(list(class = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L), grade = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L), .Label = c("a", "b"), class = "factor"), score = c(12L, 
45L, 75L, 18L, 6L, 45L, 92L, 78L, 36L, 39L)), .Names = c("class", 
"grade", "score"), class = "data.frame", row.names = c(NA, -10L
))

答案 2 :(得分:2)

另一个选项是来自spread

library(tidyr)
library(tidyr)
spread(df1, grade, score)