转换简单的数据框

时间:2014-01-27 01:35:16

标签: r dataframe reshape

我有一个如下所示的数据框:

    ID    Club Type
1   1   arsenal 18
2   1   arsenal 31
3   1   arsenal 32
4   1   arsenal 14
5   2   chelsea 14
6   2   chelsea 31
7   2   chelsea 15
8   2   chelsea 32
9   3   fulham  27
10  3   fulham  31

我想把它变成这样的东西:

    ID    Club  14 15 18 27 31 32
1   1   arsenal  1  0  1  0  1  1
2   2   chelsea  1  1  0  0  1  1
3   3   fulham   0  0  0  1  1  0

因此,在转换后的数据框中,如果某个类型与某个特定的俱乐部匹配,则会给出1值和0值。

我的数据框比这要大很多(否则我会手动完成它们)。

有人可以给我一个关于我如何做这个的建议吗?我的问题源于:

  • 类型多次出现
  • 我不确定如何插入二进制值(我意识到我可以做一些返回True / False的事情)
  • ID元素应合并为一个元素

2 个答案:

答案 0 :(得分:3)

library(reshape2) 

df <- read.table("clipboard",header=T)

dcast(df, ID + Club ~ Type, length)

  ID    Club 14 15 18 27 31 32
1  1 arsenal  1  0  1  0  1  1
2  2 chelsea  1  1  0  0  1  1
3  3  fulham  0  0  0  1  1  0 

答案 1 :(得分:2)

R中的reshape替代方案不是很漂亮,但您可以尝试:

x <- data.frame(table(mydf[-1]))          # Drop "ID" when tabulating
x$Freq <- as.numeric(as.logical(x$Freq))  # In case any are > 1
y <- reshape(x, direction = "wide", idvar="Club", timevar="Type")
merge(unique(mydf[1:2]), y)               # Reintroduce the ID
#      Club ID Freq.14 Freq.15 Freq.18 Freq.27 Freq.31 Freq.32
# 1 arsenal  1       1       0       1       0       1       1
# 2 chelsea  2       1       1       0       0       1       1
# 3  fulham  3       0       0       0       1       1       0