【问题标题】:R: Transform data set with reference fileR:使用参考文件转换数据集
【发布时间】:2019-05-03 15:58:43
【问题描述】:

不完全确定如何表达我要查找的内容,但我有一个主数据集(1000 行)和另一个详细信息文件(1000 行)。这是一对多的关系,我想加入表格,但我不想拥有多行主数据集,而是想基于详细文件中的列创建列。

以下是我正在寻找的示例:

> maindata <- data.frame(ID = c(1,2,3,4), Customer = c("Bob","Mary","Bill","Steve"), stringsAsFactors = FALSE)
> maindata
  ID Customer
  1      Bob
  2     Mary
  3     Bill
  4    Steve

> reference <- data.frame(ID = c(1,1,1,1,2,2,4), Code = c("Credit","Price","Cust","Task","Credit","Task","Cust"), Num = c(5,4,3,8,3,4,6), stringsAsFactors = FALSE)
> reference
  ID   Code Num
  1 Credit   5
  1  Price   4
  1   Cust   3
  1   Task   8
  2 Credit   3
  2   Task   4
  4   Cust   6

我希望它转换为:

> IdealOutput
  ID Customer Credit Price Cust Task
1  1      Bob      5     4    3    8
2  2     Mary      3    NA   NA    4
3  3     Bill     NA    NA   NA   NA
4  4    Steve     NA    NA    6   NA

编辑

有 2 个标题列和 2 个值列。

> reference <- data.frame(ID = c(1,1,1,1,2,2,4), Code = c("Credit","Price","Cust","Task","Credit","Task","Cust"), Num = c(5,4,3,8,3,4,6), Code2 = c("Banana","Apple","Pear","Grapes","Pear","Grapes","Banana"), Num2 = c(2,5,4,7,3,6,5), stringsAsFactors = FALSE)
> reference
  ID   Code Num  Code2 Num2
1  1 Credit   5 Banana    2
2  1  Price   4  Apple    5
3  1   Cust   3   Pear    4
4  1   Task   8 Grapes    7
5  2 Credit   3   Pear    3
6  2   Task   4 Grapes    6
7  4   Cust   6 Banana    5

我想把它改成:

> IdealOutput
  ID Customer Credit Price Cust Task Banana Apple Pear Grapes
1  1      Bob      5     4    3    8      2     5    4      7
2  2     Mary      3    NA   NA    4     NA    NA    3      6
3  3     Bill     NA    NA   NA   NA     NA    NA   NA     NA
4  4    Steve     NA    NA    6   NA      5    NA   NA     NA

我可以做两个单独的spreads,然后是Left_join,但这并不直观。

【问题讨论】:

    标签: r transform


    【解决方案1】:

    我们可以通过 'ID' 做一个full_join 然后sread

    library(tidyverse)
    full_join(reference, maindata) %>% 
          spread(Code, Num) %>%
          select(1:6)
    #   ID Customer Credit Cust Price Task
    #1  1      Bob      5    3     4    8
    #2  2     Mary      3   NA    NA    4
    #3  3     Bill     NA   NA    NA   NA
    #4  4    Steve     NA    6    NA   NA
    

    【讨论】:

    • 嘿@akrun,如果我有两组列怎么办?我在这里看到stackoverflow.com/questions/30592094/… 是否有 1 个标题列有 2 个值列但不是 2 和 2。我在上面添加了一个编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2011-12-23
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多