【发布时间】:2018-04-17 20:31:11
【问题描述】:
我对 R 很陌生,所以如果这是一个非常简单的问题,我深表歉意。我的数据结构如下:
> head(example)
id var1
1 1 a
2 1 b
3 1 c
4 2 x
5 2 y
6 3 f
>
我想把它折叠起来,这样每个 id 只有一个观察值,就像这样:
id var1
1 a, b, c
2 x, y
3 f
因此,经过大量搜索、试验和阅读类似示例后,我发现我可以使用以下方法实现此目的:
new <-tapply(example$var1, example$id, unlist)
我查看了数据,它看起来几乎就像我期望的那样: it turned id into row.names and var1 into x
但是,我认为这已经足够了,所以我将其导出。但是,无论是csv、text等我总是得到同样的错误:
Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol, :
unimplemented type 'list' in 'EncodeElement'
我尝试了toString(new$x)、unlist(new$x)、as.character(new$x)、paste(new$x) 和其他几个代码 sn-ps,但似乎没有任何东西可以修复错误。
看起来,由于数据可以正确显示在查看器中,因此还应该有一种方法可以强制它以该格式导出为 csv。还是我需要返回并改变我重塑数据的方式?
【问题讨论】:
-
将你的 tapply 语句更改为:
tapply(example$var1, example$id, toString)现在结果是一个数组而不是列表 -
效果很好 - 非常感谢!我知道这一定很简单。