如何基于R中其他2列的组合来扩展列值?

时间:2017-10-27 19:39:14

标签: r dataframe reshape2 tidyverse

我进行了广泛的搜索,发现了有关类似情况的多个问题和答案,但没有找到我在这里所面临的问题,所以我依赖于提出这个问题。

我在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如果它最终被抛弃,那就不重要了。

如果事情不是很清楚,我可以回答任何疑问。

谢谢!

1 个答案:

答案 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)