R 为一列中的值重塑数据的形状
我的data.frame看起来像这样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
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,因此有两个结果和两行)。这可能是问题所在吗?现在有一个列表,列出了实现这一点的各种方法。