Nano Hash - криптовалюты, майнинг, программирование

R: Как разделить значения только после второго пробела

У меня есть столбец с разными именами:

X <- c("Ashley, Tremond WILLIAMS, Carla", "Claire, Daron", "Luw, Douglas CANSLER, Stephan")

После второго пробела начинается имя второго человека. Например, Эшли, Тремонд — это человек, а УИЛЬЯМС, Карла — еще один.

Я пытался:

strsplit(X, "\\,\\s|\\,|\\s")

но он делится на все пробелы, поэтому я получаю:

strsplit(X, "\\,\\s|\\,|\\s")
[[1]]
[1] "Ashley"   "Tremond"  "WILLIAMS" "Carla"   

[[2]]
[1] "Claire" "Daron" 

[[3]]
[1] "Luw"     "Douglas" "CANSLER" "Stephan"

Как я могу отделить только после первого пробела, чтобы я получил?:

[1] "Ashley, Tremond"  "WILLIAMS, Carla"   

[[2]]
[1] "Claire, Daron" 

[[3]]
[1] "Luw, Douglas" "CANSLER, Stephan"

Заранее спасибо за вашу помощь

26.01.2017

  • strsplit(X, "[^,] ") дает желаемый результат. Он разбивает строку, в которой пробелу не предшествует запятая. 27.01.2017
  • Вы захотите удалить его из списка, чтобы сохранить вектор: unlist(strsplit(X, split = "[A-z] [A-z]")) 27.01.2017
  • @RyanMorton, если вы пропустите вызов unlist, он сохранит уровень группировки имен в исходном вводе и соответствует ожидаемому результату. 27.01.2017
  • Ожидаемый результат был отредактирован в посте после моего первоначального ответа, но да. strsplit() возвращает список. 27.01.2017
  • @ykt и Райан большое спасибо за вашу помощь, это работает 27.01.2017

Ответы:


1

Конечно, комментарий @ytk работает, но если вы хотите избежать регулярного выражения, вы можете быть хитрым и сделать

df2 <- df %>%
  separate(col = X, into=c("person1a","person1b","person2a","person2b"),sep= " ") %>%
  unite(col = "person1", person1a, person1b, sep=" ") %>%
  unite(col = "person2", person2a, person2b, sep=" ") 

который возвращает:

> df2
          person1          person2
1 Ashley, Tremond  WILLIAMS, Carla
2   Claire, Daron            NA NA
3    Luw, Douglas CANSLER, Stephan

p.s. Я использую df <- data.frame(X = c("Ashley, Tremond WILLIAMS, Carla", "Claire, Daron", "Luw, Douglas CANSLER, Stephan")) для ввода данных в фрейм данных.

26.01.2017
  • спасибо, но я пишу точно такой же код, и он у меня не работает, и я не очень понимаю, что означает %›%? 27.01.2017
  • @NataliaP это способ синтаксиса piping, проверьте пакет magrittr. 27.01.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..