【问题标题】:Getting complex data from one Dataframe into another将复杂数据从一个 Dataframe 获取到另一个 Dataframe
【发布时间】:2018-07-11 08:51:18
【问题描述】:

我对 R 比较陌生,我已经掌握了处理单个数据帧内数据的窍门。但是对于我现在的要求,我面临一个问题,我在下面解释过:

  1. 我有一个数据框 DD1.df,其中包含以下数据:

我有另一个数据框 DD2.df,其中包含以下数据:

我想在 DD1.df 中添加一个名为 Delivered Count 的列,并从第二个数据框中计算已交付多少订单的值。

请注意,第一个数据框中的“order.Description”列是非结构化文本,可以为空并包含带有订单号的详细文本。

有人可以帮我吗?提前致谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    给你。我们使用stringr 包中的str_extract_all 来提取所有订单 - 由字符串 ORD 定义,后跟 5 位数字。请注意,您需要修改str_extract_all 的第二个参数,以防其他模式需要定义有效订单。来自tidyr 包的separate_rows 用于将多个订单分隔到它们自己的行中。最后,我们计算总订单数和已交付订单数。

    df1 <- data.frame(
      Country = c("France", "England", "India", "America", "England"),
      City = c("Paris", "London", "Mumbai", "Los Angeles", "London"),
      Order_Desc = c("No order was placed", "ORD-34212 was the order placed",
                     "ORD-12252 and ORD-78564 was the order placed",
                     "The orders placed before 2017 was ORD-56438, ORD-13198
                     and ORD-12258", "The order was ORD-34567"),
      stringsAsFactors = FALSE
      )
    df2 <- data.frame(
      OrderNo = c("ORD-34212", "ORD-12252", "ORD-78564", "ORD-56438",
                  "ORD-13198", "ORD-12258", "ORD-34567"),
      Status = c("Delivered", "Not delivered", "Not delivered",
                 "Delivered", "Not delivered", "Delivered", "Delivered"),
      stringsAsFactors = FALSE
    )
    
    library(stringr)
    library(dplyr)
    library(tidyr)
    df1g <- df1 %>%
      group_by(Country, City) %>%
      mutate(
        orders = paste(str_extract_all(Order_Desc, "ORD-\\d{5}", simplify = TRUE),
                       collapse = "|")
      ) %>%
      distinct(Country, City, orders) %>%
      separate_rows(orders, sep = "[|]") %>%
      left_join(df2, by = c("orders" = "OrderNo"))
    df1s <- df1g %>%
      group_by(Country, City) %>%
      summarise(
        total_orders = sum(!is.na(Status)),
        delivered_orders = sum(Status == "Delivered")
      )
    

    【讨论】:

    • 哇!哇 radmuzom!非常感谢您的回复。这完美地解决了我的问题。我现在需要研究一下你使用过的这些函数和包。到目前为止,我还没有使用过“tidyr”;现在将阅读。
    • 谢谢。如果这对您有用,请选择此作为接受的答案。
    • 接受并投票!再次感谢。
    • df1 中有重复数据时遇到了另一个问题。例如,如果 (England, London) 有另一个条目,并且提到了一个新订单;然后我得到一个错误的输出。有什么建议吗?
    • 我现在无法访问 R,但现有代码应该可以工作 - 因为我们按国家和城市分组。所以我们应该在最终摘要中为每个组合获得一个唯一的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2018-01-26
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多