R 转换简单的数据帧

R 转换简单的数据帧,r,dataframe,reshape,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

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

    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
我想把它变成这样:

    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值

我的数据帧比这个要大一点(否则我会全部手动完成)

有人能给我一个建议,我该怎么做?我的问题源于以下事实:

  • 类型多次出现
  • 我不确定如何插入二进制值(我意识到我可能会做一些返回真/假的事情)
  • ID元素应该折叠成一个元素
库(2)

dfR中的
重塑
选项不是很漂亮,但您可以尝试:

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

x查看
restrape
restrape2
软件包中的
cast
dcast
函数。我相信你可以在R中找到很多从“长格式”到“宽格式”的例子。我不知道这两个包中的任何一个,我现在就来看看。谢谢你的建议!每次我试着在底部使用“重塑”时,我都想把头撞到墙上。@BrandonBertelsen,只要你用几次就没那么糟糕了。这个答案中我最不喜欢的部分是
merge
,因为它并不总是有效的,有时会对输出的顺序做一些有趣的事情。我想是这样的。但是,如果你已经“长大”了,使用重塑/2,你会觉得有点笨重