我正在尝试使用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”的“步骤”中查找行,然后将值放在新列中,在这种情况下为“增加的总值”。任何帮助将不胜感激!
答案 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'))