提取字符串的前(或后)n个字符


79

我想提取字符串的前n个字符。这将等同于Excel的LEFT()RIGHT()。一个小例子:

# create a string
a <- paste('left', 'right', sep = '')
a
# [1] "leftright"

我想产生b一个字符串,该字符串等于的前4个字母a

b
# [1] "left"

我该怎么办?

Answers:


87

看到 ?substr

R> substr(a, 1, 4)
[1] "left"

我建议看看下面的@juba答案。他提供了一个stringr解决方案。
Jochem

55

stringr软件包提供了该str_sub功能,该功能比的使用要容易一些substr,尤其是当您要提取字符串的正确部分时:

R> str_sub("leftright",1,4)
[1] "left"
R> str_sub("leftright",-5,-1)
[1] "right"

3
谢谢你的提示,朱巴;顺便说一句,我认为我会接受rcs的答案,因为它涉及基数R:)
Lisa Ann

4
知道基数R是件好事,但是如果涉及到字符串函数,则仅使用@juba所述的stringer,将使生活变得更轻松
Dieter Menne 2013年

1
我同意迪特。学习stringr将节省您几乎一样的烦恼lubridate
AndrewBrēza17年

24

您可以从Rbase包开始轻松获得Right()和Left()函数:

  • 正确的功能

    right = function (string, char) {
        substr(string,nchar(string)-(char-1),nchar(string))
    }
    
  • 左功能

    left = function (string,char) {
        substr(string,1,char)
    }
    

您可以将这两个自定义函数与excel中的left()和right()完全相同。希望你会发现它有用


6

使它简单并使用R基本功能:

# To get the LEFT part:
> substr(a, 1, 4)
[1] "left"
> 
# To get the MIDDLE part:
> substr(a, 3, 7)
[1] "ftrig"
> 
# To get the RIGHT part:
> substr(a, 5, 10)
[1] "right"

substr()功能告诉您开始和停止的位置substr(x, start, stop)


2

如果您是从Microsoft Excel来,下面的功能将类似于LEFT()RIGHT()MID()功能。


# This counts from the left and then extract n characters

str_left <- function(string, n) {
  substr(string, 1, n)
}



# This counts from the right and then extract n characters

str_right <- function(string, n) {
  substr(string, nchar(string) - (n - 1), nchar(string))
}


# This extract characters from the middle

str_mid <- function(string, from = 2, to = 5){
  
  substr(string, from, to)
  }

例子:

x <- "some text in a string"
str_left(x, 4)
[1] "some"

str_right(x, 6)
[1] "string"

str_mid(x, 6, 9)
[1] "text"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.