R наблюдение strs split - несколько значений в столбцах - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть датафрейм в R относительно домов.Это небольшой пример:

Address                              Type       Rent
Glasgow;Scotland                     House      1500
High Street;Edinburgh;Scotland      Apartment    1000
Dundee;Scotland                     Apartment    800
South Street;Dundee;Scotland        House       900

Я хотел бы просто вытащить последние два экземпляра столбца «Адрес» в столбец «Город и округ» в моем фрейме данных.

Я использовал mutate и strsplit, чтобы разделить этот столбец на:

data<-mutate(dataframe, split_add = strsplit(dataframe$Address, ";")

Теперь у меня есть новый столбец в моем фрейме данных, который похож на следующее:

split_add                             
c("Glasgow","Scotland")                     
c("High Street","Edinburgh","Scotland")      
c("Dundee","Scotland")                    
c("South Street","Dundee","Scotland")  

Как извлечь последние 2 экземпляра каждого из этих векторных наблюдений в столбцы «Город» и «Округ»?

Я пытался: data <-mutate (data, city = split_add [-2])) мышлениеэто заняло бы второй случай с конца векторов, но это не сработало.</p>

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Я думаю о другом способе решения этой проблемы.

1.Создание фрейма данных с данными столбца split_add

c("Glasgow","Scotland")                      
c("High Street","Edinburgh","Scotland")      
c("Dundee","Scotland")                    
c("South Street","Dundee","Scotland")  

test_data <- data.frame(split_add <- c("Glasgow, Scotland",                     
                          "High Street, Edinburgh, Scotland",      
                          "Dundee, Scotland",                    
                          "South Street, Dundee, Scotland"),stringsAsFactors = F)
names(test_data) <- "address"

2. Используйте separate() из tidyr для разделения столбца

library(tidyr)

new_test <- test_data %>% separate(address,c("c1","c2","c3"), sep=",")

3.Используйте dplyr и ifelse(), чтобы зарезервировать только последние два столбца

library(dplyr)
new_test %>% 
  mutate(city = ifelse(is.na(c3),c1,c2),county = ifelse(is.na(c3),c2,c3)) %>% 
  select(city,county)

Окончательные данные выглядят следующим образом.

enter image description here

0 голосов
/ 25 апреля 2018

использование tidyr::separate() с опцией fill = "left", вероятно, является лучшим выбором ...

dataframe <- read.table(header = T, stringsAsFactors = F, text = "
Address                          Type       Rent
Glasgow;Scotland                 House      1500
'High Street;Edinburgh;Scotland' Apartment  1000
Dundee;Scotland                  Apartment  800
'South Street;Dundee;Scotland'   House      900
")

library(tidyr)

separate(dataframe, Address, into = c("Street", "City", "County"), 
         sep = ";", fill = "left")

#         Street      City   County      Type Rent
# 1         <NA>   Glasgow Scotland     House 1500
# 2  High Street Edinburgh Scotland Apartment 1000
# 3         <NA>    Dundee Scotland Apartment  800
# 4 South Street    Dundee Scotland     House  900
0 голосов
/ 25 апреля 2018

Предполагая, что вы используете dplyr

data <- mutate(dataframe, split_add = strsplit(Address, ';'), City = tail(split_add, 2)[1], Country = tail(split_add, 1))

...