如何仅合并 r 中等于不同列中特定值的行的数据帧

问题描述 投票:0回答:1

我在 R 中有 2 个数据框。

数据框 1 (df_1) 包含许多列,但这里只有 3 列相关:

Problem         |Service_Time | Imputed_Problem
----------------------------------------------
A               |    3.5      |      NA 
B               |    1.6      |      NA
C               |    2.8      |      NA
D               |    NA       |      B

当问题等于D时,这意味着该人在没有被看到的情况下离开了(可能是因为队列太长)。问题没有登记,没有服务时间。

我想了解需求,因此希望根据他们可能遇到的问题以及相关的服务时间(如果他们没有离开而没有被发现)将这些人包含在我的数据集中。我根据每个问题在总体中出现的比率,将问题(A、B 或 C)随机分配给所有问题 == D 的情况,从而将问题归咎于那些没有被发现就离开的人。

如果观察到的是“真实”问题,我有该案例的服务时间。在问题已被估算的情况下(此处未记录的问题 (D) 已被分配为 B),我想在名为“Impulated_Service_Time”的新列中分配该问题的平均服务时间。

我创建了一个数据框 (df_2),它给出了 3 个问题中每一个问题的平均服务时间。

Problem | Average_Service_Time
----------------------
A       |  3.2
B       |  4.2
C       |  1.7

我在 df_1 中创建了一个名为“Impulated_Service_Time”的新列,它是“Service_Time”列的精确副本。

如何仅在“问题”列中的观测值为“D”时导入相应“Impulated_Problem”列的“Average_Service_Time”值?

我尝试过以下方法:

merged_df <- merge(df_1, df_2, by.x = "Imputed_Problem", by.y = "Problem", all.x = TRUE)

merged_df$Imputed_Service_Time <- ifelse(is.na(merged_df$Service_Time), merged_df$Average_Service_Time, merged_df$Service_Time)

但是我收到以下错误消息:

Error in ans[ypos] <- rep(yes, length.out = len)[ypos] : 
  replacement has length zero
In addition: Warning message:
In rep(yes, length.out = len) : 'x' is NULL so the result will be NULL
r dataframe merge
1个回答
0
投票

您可以尝试以下方法:

library(dplyr)

left_join(df_1, df_2, by=c("Imputed_Problem" = "Problem")) %>% 
  mutate(Imputed_Service_Time = case_when(
    is.na(Imputed_Problem)~Service_Time,
    .default = Average_Service_Time
  ))

输出:

 Problem Service_Time Imputed_Problem Average_Service_Time Imputed_Service_Time
1       A          3.5            <NA>                   NA                  3.5
2       B          1.6            <NA>                   NA                  1.6
3       C          2.8            <NA>                   NA                  2.8
4       D           NA               B                  4.2                  4.2
© www.soinside.com 2019 - 2024. All rights reserved.