Замена значений в переменных фрейма данных из списка вложенных фреймов данных - PullRequest
0 голосов
/ 22 ноября 2018

Предположим, у меня есть следующий фрейм данных:

df <- data.frame(x = rnorm(10), y = rnorm(10), z = rnorm(10))

И я хотел бы заменить значения в переменных на соответствующий им фрейм данных и имена переменных в следующем списке:

replace_df <- list(x = data.frame(x = 1:10), 
                   y = data.frame(y = 11:20), 
                   z = data.frame(z = 21:30))

Как бы я это сделал, используя dplyr?

Я чувствую, что моя проблема связана с этим Q & A , но я не смог реализовать ответы на этот вопросправильно в моей ситуации.

Я попытался описать ниже, среди прочего, безуспешно:

library(tidyverse)
variables <- c("x", "y", "z")

df %>% 
  mutate_at(vars(variables), funs(replace_df[[.]][[.]]))

"тупой" путь будет следующим:

df %>% 
  mutate(x = replace_df[["x"]][["x"]],
         y = replace_df[["y"]][["y"]],
         z = replace_df[["z"]][["z"]])

1 Ответ

0 голосов
/ 22 ноября 2018

Вам нужно использовать expr!Я не уверен, что подмножество будет работать так, как вы пытались выше, но я смог получить правильный вывод, сделав простую функцию и передав аргумент, который был заключен в expr()

df <- data.frame(x = rnorm(10), y = rnorm(10), z = rnorm(10))

replace_df <- list(x = data.frame(x = 1:10), 
                   y = data.frame(y = 11:20), 
                   z = data.frame(z = 21:30))

my_func <- function(string) {

  return(
    replace_df[[string]][[string]]
  )

}

df %>% 
  mutate_at(vars(x, y, z), funs(my_func(expr(.))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...