Как изменить другой фрейм данных внутри mutate

У меня есть два фрейма данных:

dane <- data.frame(x = 1:5, y = 5:1, Salary =  c(1,2,3,2,1))
> dane
  x y Salary
1 1 5      1
2 2 4      2
3 3 3      3
4 4 2      2
5 5 1      1

а также

x <- dane %>% select(-Salary) %>% gather() %>% arrange(key, value) %>%
group_by(key) %>% mutate(value = (value + lead(value)) / 2) %>% na.omit()
> x
# A tibble: 8 x 2
# Groups:   key [2]
    key value
  <chr> <dbl>
1     x   1.5
2     x   2.5
3     x   3.5
4     x   4.5
5     y   1.5
6     y   2.5
7     y   3.5
8     y   4.5

Теперь я хотел бы вычислить такую ​​ошибку (я хочу mutate_ другой фрейм данных внутри mutate, используя значения из первого):

x %>% mutate(error = dane %>%
             mutate_(gr = paste("ifelse(", key, "<=", value, ", 0, 1)")) %>%
             group_by(gr) %>%
             mutate(pred = mean(Salary)) %>%
             summarise(error = sum((Salary-pred)^2)) %>%
             select(error) %>%
             sum())

но в результате я получаю что-то вроде этого:

# A tibble: 8 x 3
# Groups:   key [2]
    key value error
  <chr> <dbl> <dbl>
1     x   1.5     2
2     x   2.5     2
3     x   3.5     2
4     x   4.5     2
5     y   1.5     2
6     y   2.5     2
7     y   3.5     2
8     y   4.5     2

В каждой строке использовалось одно и то же значение столбцов key и value. Что мне делать, чтобы это исправить?


person Maju116    schedule 09.10.2017    source источник


Ответы (1)


Кажется, что rowwise функция и есть ответ:

x %>% rowwise() %>% mutate(error = dane %>%
         mutate_(gr = paste("ifelse(", key, "<=", value, ", 0, 1)")) %>%
         group_by(gr) %>%
         mutate(pred = mean(Salary)) %>%
         summarise(error = sum((Salary-pred)^2)) %>%
         select(error) %>%
         sum())

Source: local data frame [8 x 3]
Groups: <by row>

# A tibble: 8 x 3
    key value error
  <chr> <dbl> <dbl>
1     x   1.5   2.0
2     x   2.5   2.5
3     x   3.5   2.5
4     x   4.5   2.0
5     y   1.5   2.0
6     y   2.5   2.5
7     y   3.5   2.5
8     y   4.5   2.0
person Maju116    schedule 09.10.2017