通过匹配数据帧之间的两个值在数据帧中创建新列

时间:2019-10-02 10:38:42

标签: r dataframe merge dplyr mutate

我正在尝试使用mutate在数据框中创建新列。这应该匹配两个不同数据帧之间的两列中的值,以及ID和步骤号,然后从第二个数据帧中的第三列中返回该值。希望下面的代码可以使我要实现的目标更加清晰!

这是正确的解决方法吗,我已经研究过使用合并,但认为并不能满足我的需要。

步骤1 <-iData%>%

filter(IndicatorID == 43)%>%

mutate(Step = 1)%>%

mutate(结果=输入A +输入B)%>%

mutate(stepname = ifelse(IndicatorID == Step $ IndicatorID&Step == Step $ Step,Step $ StepName,“”)

基本上,应该在“指示器”为43且“步骤= 1”的“步骤”中查找行,然后将值放在新列中,在这种情况下为“增加的总值”。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

如果我的解释正确,那么将其视为联接而不是变异可能会使其更容易

我正在创建虚拟数据,希望可以弄清我所做的假设。数据。

因此,我们有两个表。在这两者中,我们都有IndicatorID和Step。然后在step数据框中,我们有一个var'StepName',我们希望能够通过在IndicatorID和Step上进行匹配来在名为step1的第三个表中使用这些值。

step <- tibble(
        IndicatorID = c(41, 42, 43, 44, 45, 46), 
        Step = c(1, 2, 1, 4, 5, 6), 
        StepName = c('left', 'right', 'up', 'down', 'under', 'over'))


iData <- tibble(
        IndicatorID = c(seq(from = 1, to = 43)), 
        InputA = runif(43), 
        InputB = runif(43)) %>%
        mutate(iresult = InputA + InputB)

Step1 <- iData %>%
        filter(IndicatorID == 43) %>%
        mutate(Step = 1) %>%
        left_join(step, by = c('IndicatorID', 'Step'))

IndicatorID InputA InputB iresult  Step StepName
        <dbl>  <dbl>  <dbl>   <dbl> <dbl> <chr>   
          43  0.773  0.124   0.898     1 up   


### Example where we select only the columns from step 
### that we are interested in keeping, without doing a semi_join

Step1 <- iData %>%
        filter(IndicatorID == 43) %>%
        mutate(Step = 1) %>%
        left_join(step %>%
             select(IndicatorID, Step, StepName), 
             by = c('IndicatorID', 'Step'))