R 为一列中的值重塑数据的形状

R 为一列中的值重塑数据的形状,r,dataframe,reshape,melt,R,Dataframe,Reshape,Melt,我的data.frame看起来像这样 ID | test | test_result 1 | B | 10 2 | A | 9 3 | A | 11 4 | C | 7 5 | F | 5 我想得到这样的东西: test | test_reult_ID1 | test_result_ID2 | test_result_ID3 ... A | NA | 9 | 11 B

我的data.frame看起来像这样

ID | test | test_result
1  |  B   |   10
2  |  A   |   9
3  |  A   |   11
4  |  C   |   7
5  |  F   |   5
我想得到这样的东西:

test | test_reult_ID1 | test_result_ID2 | test_result_ID3 ...
 A   |   NA           |     9           |   11
 B   |   10           |     NA          |   NA
它只在少数情况下使用整形()到宽格式,但在整个数据帧(约23.000个ID)中,整形()花费的时间太长。
Melt()和cast()确实会重塑数据,但会将测试结果中的值替换为测试频率。还有其他的办法吗?谢谢

整形2包中的dcast执行以下操作:

require(reshape2)
dcast(data, test ~ ID , value_var = 'test_result' )

#  test  1  2  3  4  5
#1    A NA  9 11 NA NA
#2    B 10 NA NA NA NA
#3    C NA NA NA  7 NA
#4    F NA NA NA NA  5

另一种解决方案是使用
base
R中的
restrape
函数

reshape(mydf, direction = 'wide', idvar = 'test', timevar = 'ID', 
  v.names = 'test_result', sep = "_")

编辑。我看到您已经尝试了
重塑
,但时间太长了。您能提供有关实际数据的更多详细信息吗?

我刚刚尝试了整个data.frame,它给了我以下错误消息:
聚合函数缺失:默认为长度
,并且再次仅使用频率而不是值。然而,只有几行在工作中。您知道原因吗?@Elisa当您的
dcast
参数在结果的每个单元格中产生多个值时,就会发生这种情况。如果发生这种情况,则需要进行某种聚合,默认函数为count。您的数据中是否有重复的值?无论如何,也许可以尝试使用
mean
作为聚合函数。@Andrie:聚合函数会停止错误,但显然
mean
不起作用,因为:
参数不是数字或逻辑参数:返回NA
是否有类似“只返回值”的聚合函数?您的问题是要返回多个值,因此您需要找到一个将多个值折叠为单个值的函数。如果你的数据是类<代码>字符< /代码>,也许考虑使用<代码>粘贴< /代码>解决它:问题是一个ID由于某种原因有三个而不是两行。duplicated()解决了这个问题。我的原始数据有这三列,大约23000行。每行有两个相同的ID(一个人解决了两个测试,例如A和F,因此有两个结果和两行)。这可能是问题所在吗?现在有一个列表,列出了实现这一点的各种方法。