2016-09-18 34 views
0

我想將1列分成3列。問題是,如果我用分隔符拆分列「」有時containts 3個值,有時2不同數值的分割列

輸出應該如下所示:

rooms       location   Street Suburb City price m2 
1  2   examplestreet 3, munich    <NA>  <NA> munich 500000 40 
2  3     suburg2, berlin    <NA> suburg2 berlin 300000 60 
3  5 examplestreet 45, suburb1, munich examplestreet 45 suburb1 munich 350000 55 

這是我做的:

> rooms = c(2, 3, 5) 
> location = c("examplestraße 3, munich", "suburb2, berlin", "examplestaße 45, suburb1, munich") 
> price = c(500000, 300000, 350000) 
> m2 = c(40, 60, 55) 
> 
> dataexample = data.frame(rooms, location, price, m2) 
> dataexample 
    rooms       location price m2 
1  2   examplestraße 3, munich 500000 40 
2  3     suburb2, berlin 300000 60 
3  5 examplestaße 45, suburb1, munich 350000 55 
> rooms = c(2, 3, 5) 
> location = c("munich", "suburb2, berlin", "examplestaße 45, suburb1, munich") 
> price = c(500000, 300000, 350000) 
> m2 = c(40, 60, 55) 
> 
> dataexample = data.frame(rooms, location, price, m2) 
> 
> library(tidyr) 
> separate(dataexample, location, into=c('Street', 'Suburb', "City"), remove=FALSE, sep = ",") 
    rooms       location   Street Suburb City price m2 
1  2       munich   munich  <NA> <NA> 500000 40 
2  3     suburb2, berlin   suburb2 berlin <NA> 300000 60 
3  5 examplestaße 45, suburb1, munich examplestaße 45 suburb1 munich 350000 55 
Warning message: 
Too few values at 2 locations: 1, 2 

回答

0

我們還可以通過分隔符(,),墊NAS進行有幾個元素list元素,rbindlist分裂「位置」欄與base R做到這一點元素和cbind與原始數據集

lst <- strsplit(as.character(dataexample$location), ", ") 
cbind(dataexample, `colnames<-`(do.call(rbind, lapply(lapply(lst, 
     `length<-`, max(lengths(lst))), 
     function(x) c(x[is.na(x)], x[!is.na(x)]))), c('Street', 'Suburb', "City"))) 
# rooms       location price m2   Street Suburb City 
#1  2       munich 500000 40   <NA> <NA> munich 
#2  3     suburb2, berlin 300000 60   <NA> suburb2 berlin 
#3  5 examplestaße 45, suburb1, munich 350000 55 examplestaße 45 suburb1 munich