r - использовать `клей` для замены переменных в столбце на переменные в другом столбце - PullRequest
2 голосов
/ 27 марта 2020

Я пытаюсь сохранить фрейм данных, где у меня есть список сообщений для пользователя. Я хотел бы иметь возможность заменить мои переменные в моем сообщении тем, что находится в столбце, на который я ссылаюсь.

Например, это работает:

df <- data.frame(id = rep(1:3, each = 3),
                 this = rep(letters[1:3], each = 3),
                 that = rep(letters[24:26], each = 3),
                 foo = rep(c("apple", "pear", "banana"), each = 3))

df %>% mutate(message = glue("{this} is {that}"))

Но это не так:


library(tidyverse)
library(glue)

verbiage <- data.frame(id = 1:3,
                       message = c("{this} is {that}", "{foo} is something", "something is {foo}"))

verbiage

df <- data.frame(id = rep(1:3, each = 3),
                 this = rep(letters[1:3], each = 3),
                 that = rep(letters[24:26], each = 3),
                 foo = rep(c("apple", "pear", "banana"), each = 3))

df

df %>% 
  inner_join(verbiage, by = "id") %>% 
  mutate(message = glue(message))

1 Ответ

2 голосов
/ 27 марта 2020

Мы можем использовать rowwise

library(glue)
library(dplyr)
df %>% 
   inner_join(verbiage, by = "id")  %>%
   rowwise %>% 
   mutate(message = as.character(glue(as.character(message))))
# A tibble: 9 x 5
# Rowwise: 
#     id this  that  foo    message            
#  <int> <fct> <fct> <fct>  <chr>              
#1     1 a     x     apple  a is x             
#2     1 a     x     apple  a is x             
#3     1 a     x     apple  a is x             
#4     2 b     y     pear   pear is something  
#5     2 b     y     pear   pear is something  
#6     2 b     y     pear   pear is something  
#7     3 c     z     banana something is banana
#8     3 c     z     banana something is banana
#9     3 c     z     banana something is banana
...