【发布时间】:2017-10-27 19:39:13
【问题描述】:
我广泛搜索并找到了多个关于类似情况的问题和答案,但不是我在这里面临的问题,所以我依赖于提出这个问题。
我在 R 中有一个具有这种结构的凌乱数据框,我只是通过在连接到存储了所有数据的数据库后在 R 中运行查询来获得它。
id location year category subCategory numericValue Unit
1 place_1 1960 cat_1 subcat_1 34.567 kg
2 place_1 1961 cat_1 subcat_1 564.566 kg
3 place_1 1962 cat_1 subcat_1 3.4356 kg
4 place_1 1963 cat_1 subcat_1 654.44 kg
5 place_1 1960 cat_1 subcat_2 409.65 cm
6 place_1 1961 cat_1 subcat_2 985545 cm
7 place_1 1962 cat_1 subcat_2 5436.4 cm
8 place_1 1963 cat_1 subcat_2 324.23 cm
...
...
...
341 place_1 1960 cat_2 subcat_1 487.65 cm³
342 place_1 1961 cat_2 subcat_1 434.65 cm³
343 place_1 1962 cat_2 subcat_1 421.65 cm³
344 place_1 1963 cat_2 subcat_1 87.65 cm³
345 place_1 1960 cat_2 subcat_2 0.33 ton
346 place_1 1961 cat_2 subcat_2 1.65 ton
347 place_1 1962 cat_2 subcat_2 89.2 ton
348 place_1 1963 cat_2 subcat_2 1345 ton
...
...
12334 place_2 1960 cat_1 subcat_1 1111 kg
12334 place_2 1961 cat_1 subcat_1 2222 kg
12334 place_2 1962 cat_1 subcat_1 3333 kg
12334 place_2 1960 cat_1 subcat_2 4444 cm
12334 place_2 1961 cat_1 subcat_2 5555 cm
12334 place_2 1962 cat_1 subcat_2 6666 cm
...
...
...
99999 place_67 1982 cat_5 subcat_9 3455 Watt
尝试解释发生了什么: 我有一个数值,实际数据,测量并分类为类别和子类别,它是在给定年份的某个位置获得的。 给定位置的类别+子类别的组合有几年的时间段,并且一直持续到在所有年份和每个类别及其子类别中观察到所有位置。
我想要获得的是一个数据框,它将每个类别+子类别组合在一起,并在其价值下测量数据,有效地将一个很长的数据框变成一个很宽的数据框。
id location year cat_1.subcat_1 cat_1.subcat_2 ... cat_5.subcat_9
1 place_1 1960 34.567 409.65 NA
2 place_1 1961 564.566 985545 NA
3 place_1 1962 3.4356 5436.4 444
4 place_1 1963 654.44 324.23 0.5
5 place_2 1960 1111 4444 3.22e-04
...
350 place_67 1982 NA NA 3455
我可以通过我在数据库上创建的一个过程来实现这一点,该过程已经存储了所有这些,但是运行它非常昂贵。我不知道如何处理 Unity 列,我认为我不能将它合并到任何地方,因为它是测量本身所独有的,而不是像类别/子类别这样的组合,但如果它最终被丢弃并不重要.
如果事情不是很清楚,我可以回答任何疑问。
谢谢!
【问题讨论】:
-
我看到它确实与我的问题相似。但是有没有办法保留 Unit 列?
-
'Unit' 只是组内的一个常量,所以将它与 id/location 一起添加到 id 变量列表中。
-
我尝试了你前面提到的问题的答案,使用 reshape 并将 Unit 应用于 id 变量的向量,但不幸的是,无论有没有 Unit,该方法都不起作用,显示以下错误粘贴错误( rep(l, length(lvs)), rep(lvs, each = length(l)), sep = sep) 不能分配长度为 1695223112 的向量但是好的方面是 tidyverse 对您指定重复的同一问题的响应有效,但是当然没有Unit。这是一种损失,但正如我提到的那样并不重要
-
哇...你的数据有多大,你最终得到了一个 1.7 b百万长度的向量?我认为那里出了点问题,很明显。也许
id不应该是 idvars 的一部分,因为它本质上只是一个行号。 -
非常感谢您指出另一个帮助我解决问题的问题。:)
标签: r dataframe reshape2 tidyverse