【问题标题】:How to seperate a strings column based on first whitespace [duplicate]如何根据第一个空格分隔字符串列[重复]
【发布时间】:2017-10-15 07:08:26
【问题描述】:

这是我的数据。

mtcars$brand=row.names(mtcars)
    mtcars$brand
    ##  [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
    ##  [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
    ##  [7] "Duster 360"          "Merc 240D"           "Merc 230"           
    ## [10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
    ## [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
    ## [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
    ## [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
    ## [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
    ## [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
    ## [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
    ## [31] "Maserati Bora"       "Volvo 142E"

我只想提取品牌的名字(直到第一个空格的子字符串)

像这样 - 怎么做

##                               brand    brand2
## Mazda RX4                 Mazda RX4     Mazda 
## Mazda RX4 Wag         Mazda RX4 Wag     Mazda 
## Datsun 710               Datsun 710     Datsun 
## Hornet 4 Drive       Hornet 4 Drive     Hornet 
## Hornet Sportabout Hornet Sportabout     Hornet 
## Valiant                     Valiant     Valiant
## Duster 360               Duster 360     Duster 
## Merc 240D                 Merc 240D     Merc 
## Merc 230                   Merc 230     Merc 
## Merc 280                   Merc 280     Merc

这是四种可能的方式

> mtcars$brand2=gsub( " .*$", "",mtcars$brand)
> mtcars$brand3=sapply(strsplit(mtcars$brand, "\\s+"), "[", 1)

> mtcars$brand4=substr(mtcars$brand,1,regexpr(" ",mtcars$brand))
> mtcars$brand4=ifelse(mtcars$brand4=="",mtcars$brand,mtcars$brand4)

 library(stringr)
> mtcars$brand5=str_extract(mtcars$brand, boundary("word"))

【问题讨论】:

  • 你试过stringr::str_split(df, " ")[[1]]吗?
  • 然而another link

标签: r string substring grepl


【解决方案1】:

你可以使用str_extract

library("stringr")
brand <- row.names(mtcars)
str_extract(brand, boundary("word"))
>[1] "Mazda"    "Mazda"    "Datsun"   "Hornet"   "Hornet"   "Valiant" 
>[7] "Duster"   "Merc"     "Merc"     "Merc"     "Merc"     "Merc"    
>[13] "Merc"     "Merc"     "Cadillac" "Lincoln"  "Chrysler" "Fiat"    
>[19] "Honda"    "Toyota"   "Toyota"   "Dodge"    "AMC"      "Camaro"  
>[25] "Pontiac"  "Fiat"     "Porsche"  "Lotus"    "Ford"     "Ferrari" 
>[31] "Maserati" "Volvo"

【讨论】:

    【解决方案2】:

    strsplit

    unlist(lapply(strsplit(rownames(mtcars)," "),function(x) x[1]))
    

    gsub

    gsub("^([A-Za-z]+) .*","\\1",rownames(mtcars),perl=TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 2017-11-10
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多