我进行了广泛的搜索,发现了有关类似情况的多个问题和答案,但没有找到我在这里所面临的问题,所以我依赖于提出这个问题。
我在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专栏,我不认为我可以将它合并到任何地方,因为它对于测量本身是独一无二的,而不是像类别/子类别那样的组合,但它&#39如果它最终被抛弃,那就不重要了。
如果事情不是很清楚,我可以回答任何疑问。
谢谢!
答案 0 :(得分:0)
你可以寻找(< 3 tidyverse < 3 ):
## Building fake dataset
df <- expand.grid(location = c("place1", "place2"),
catg = c("cat1", "cat2"),
subcateg = c("subcat1", "subcat2", "subcat3"),
year = (2000:2001))
df$value <- rpois(nrow(df), 10)
## the operation you may look for
df %>% unite(catg.subcateg, catg,subcateg) %>% spread(catg.subcateg, value)