Объединяйте и корректируйте символы в новом столбце - PullRequest
0 голосов
/ 06 декабря 2018

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

ID                Town
AK_Town_0233470   Hooper Bay
CA_Town_0603330   Avilla Beach
CA_Town_0616462   Corte Madera
CA_Town_0623042   Eureka
CA_Town_0625338   Foster City

И я пытаюсь создать новый столбец (New_ID), который выглядит следующим образом:

ID                Town           New_ID
AK_Town_0233470   Hooper Bay     Hooper Bay, AK
CA_Town_0603330   Avilla Beach   Avilla Beach, CA
CA_Town_0616462   Corte Madera   Corte Madera, CA
CA_Town_0623042   Eureka         Eureka, CA
CA_Town_0625338   Foster City    Foster City, CA

Я думаю, что объединение tidyverse может помочь,но я не просто объединяю столбцы, но добавляю части столбца ID в столбец Town и включаю запятую.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

У меня очень похожий подход к Андерсу выше, но я использовал функцию mutate из dplyr.

df <- data.frame(ID = c("AK_Town_0233470", "CA_Town_0603330", "CA_Town_0616462", 
                        "CA_Town_0623042", "CA_Town_0625338"), 
                 Town = c("Hooper Bay", "Avilla Beach", "Corte Madera", "Eureka", "Foster City"))

df %>% 
   mutate(New_ID = paste0(Town, ", ", str_extract(df$ID, pattern = "[[:alpha:]][[:alpha:]]")))

Это результат:

          ID         Town           New_ID
1 AK_Town_0233470   Hooper Bay   Hooper Bay, AK
2 CA_Town_0603330 Avilla Beach Avilla Beach, CA
3 CA_Town_0616462 Corte Madera Corte Madera, CA
4 CA_Town_0623042       Eureka       Eureka, CA
5 CA_Town_0625338  Foster City  Foster City, CA

Я использовал функцию str_extract из пакета stringr (также внутри tidyverse)вместо substr() от базы R, но это тоже будет работать.

df %>% 
   mutate(New_ID = paste0(Town, ", ", substr(df$ID, 1, 2)))
0 голосов
/ 06 декабря 2018

Функции paste и substr легко сделают это, как показано ниже:

df <- read.table(stringsAsFactor = FALSE, header=TRUE, sep = ",", 
                 text = 
"ID,                Town
AK_Town_0233470,   Hooper Bay
CA_Town_0603330,  Avilla Beach
CA_Town_0616462,   Corte Madera
CA_Town_0623042,   Eureka
CA_Town_0625338,   Foster City")

# Construct new ID using paste
df$new_id <- paste0(df$Town, ", ", substr(df$ID, 1,2))
print(df)
#               ID            Town              new_id
#1 AK_Town_0233470      Hooper Bay      Hooper Bay, AK
#2 CA_Town_0603330    Avilla Beach    Avilla Beach, CA
#3 CA_Town_0616462    Corte Madera    Corte Madera, CA
#4 CA_Town_0623042          Eureka          Eureka, CA
#5 CA_Town_0625338     Foster City     Foster City, CA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...