R dplyr: rowwise + mutate (+ glue) - как получить / ссылаться на содержимое строки? - PullRequest
0 голосов
/ 19 сентября 2018

Простой пример ввода данных:

dataset <- data.frame("part1" = c("a", "b", "c"),
                       "part2" = c("x", "y", "z"),
                       "caption" = c("{part1} {part2}",
                                     "{part2} {part1}",
                                     "{part2} {part1} {part2}"),
                       stringsAsFactors = F)

Ожидаемые результаты:

# A tibble: 3 x 3
  part1 part2 caption
  <chr> <chr> <chr>  
1 a     x     a x    
2 b     y     y b    
3 c     z     z c z  

Приведенный ниже код не работает, поскольку . относится ко всему datasetвместо данных всего содержимого строки:

dataset %>%
  rowwise() %>%
  mutate("caption" =
           glue::glue_data(., caption)
         )

Вопрос: как передать содержимое строки (всего) в glue?

Код, который работает (объявлена ​​строка «содержимое»)явно) это не то, что я искал, потому что в наборе данных caption в моем наборе данных есть больше столбцов, поэтому я хотел бы избежать объявления этого вручную, просто передать содержимое всей строки.

dataset %>%
  rowwise() %>%
  mutate("caption" =
           glue::glue_data(
             list("part1" =  part1,
                  "part2" = part2)
             , caption)
  )

1 Ответ

0 голосов
/ 19 сентября 2018

Он работает просто как:

dataset %>% rowwise %>% mutate(r=as.character(glue(caption)))
#Source: local data frame [3 x 4]
#Groups: <by row>

## A tibble: 3 x 4
#  part1 part2 caption                 r    
#  <chr> <chr> <chr>                   <chr>
#1 a     x     {part1} {part2}         a x  
#2 b     y     {part2} {part1}         y b  
#3 c     z     {part2} {part1} {part2} z c z

ПРИМЕЧАНИЕ. Я добавил as.character только для того, чтобы избежать предупреждений, которые могут быть связаны с rowwise (Vectorizing 'glue' elements may not preserve their attributes)

...