Выберите и левое соединение: Ошибка: не удалось найти функцию, проблема с синтаксисом? [Дубликат]

Раздражающе, Javascript не предоставляет рекурсивный параметр PCRE (?R), поэтому далеко не просто справиться с вложенной проблемой. Однако это может быть сделано.

Я не буду воспроизводить код, но если вы посмотрите блог Стива Левитана , у него есть хорошие статьи по этому вопросу. Он должен это сделать, он, вероятно, является ведущим авторитетом в RegExp в JS. Он написал XRegExp , который заменяет большинство битов PCRE, которые отсутствуют, есть даже плагин Match Recursive !

5
задан Ricky 27 January 2015 в 04:14
поделиться

2 ответа

Я думаю, что вы можете сделать эту работу, если вы приложите «незаконные» имена столбцов в обратном направлении. Например, скажем, я начинаю с этого фрейма данных (называемый df):

  BILLING.STATUS.(COMPLETED./.INCOMPLETE) ORDER.VALUE.(USD)
1                                       A        0.01544196
2                                       A        0.95522706
3                                       B        1.13479303
4                                       B        1.22848285

Тогда я могу суммировать его следующим образом:

dat %>% group_by(`BILLING.STATUS.(COMPLETED./.INCOMPLETE)`) %>% 
  summarise(count=n(),
            mean = mean(`ORDER.VALUE.(USD)`))

Предоставление:

  BILLING.STATUS.(COMPLETED./.INCOMPLETE) count      mean
1                                       A     2 0.4853345
2                                       B     2 1.1816379

Backticks также пригодится для обращения к именам переменных или их создания с помощью пробелов. Вы можете найти ряд вопросов, относящихся к dplyr и обратным выводам на SO, и есть также обсуждение обратных ссылок в help для Quotes.

13
ответ дан eipi10 15 August 2018 в 21:04
поделиться
  • 1
    Спасибо, это работает как для group_by, так и для select. Я спотыкаюсь, когда я перейду к формуле в summarise, то есть orders.n %>% group_by(ORDER.NO) %>% summarize(total=sum( ORDER.VALUE. (USD) )), что, по понятным причинам, вызывает ошибку Error in sum("1603") : invalid 'type' (character) of argument. Но это уже выходит за рамки этого вопроса. – Ricky 27 January 2015 в 05:04
  • 2
    И выше показано, как я не знаю, как заключить обратные ссылки в backticks на SO (см. Unshaded ORDER.VALUE. (USD)) ... – Ricky 27 January 2015 в 05:05
  • 3
    Я не получаю ошибку до тех пор, пока имена нелегальных переменных не будут включены в обратные ссылки. Я обновил свой ответ, чтобы ответить на этот вопрос. – eipi10 27 January 2015 в 05:11

Я просто использую этот не-ответ в качестве контр-примера или иллюстрации ограничений для метода обратной линии. (Это был первый стратег, который я пробовал. Возможно, это тот факт, что две языковые операции («(» и «/») обрабатываются смежно, что приводит к сбою.)

names(iris)[5] <- "Specie(/)s"
library(dplyr)
by_species <- iris %>% group_by(`Specie(/)s`)
by_species %>% summarise_each(funs(mean(., na.rm = TRUE)))
#Error: cannot modify grouping variable

Пробовал разновидность или другие ориентированные на язык усилия с quote, as.name и substitute, которые также потерпели неудачу. (Хотелось бы, чтобы был механизм, чтобы просить, чтобы это поглотило нижнюю часть ответов.)

2
ответ дан 42- 15 August 2018 в 21:04
поделиться
  • 1
    Пожалуйста, не откладывайте. Это действительно только комментарий. – 42- 27 January 2015 в 06:15
  • 2
    Я получаю ту же ошибку, когда я пытаюсь обобщить резюме в кадре данных, который я использовал в своем ответе. Мне интересно, если это не происходит из-за того, что вы использовали незаконный (ые) персонаж (ы), а потому, что местоимение . не настроено для обработки недопустимых имен столбцов. – eipi10 27 January 2015 в 06:36
Другие вопросы по тегам:

Похожие вопросы: