簡體   English   中英

如何從 R 向量中的每個元素中刪除最后 n 個字符

[英]How to remove last n characters from every element in the R vector

我對 R 很陌生,我在網上找不到一個簡單的例子來說明如何從向量(數組?)的每個元素中刪除最后 n 個字符

我來自 Java 背景,所以我想做的是遍歷a$data每個元素並從每個元素中刪除最后 3 個字符。

你會怎么做?

這是我會做的一個例子。 我希望這就是你要找的。

char_array = c("foo_bar","bar_foo","apple","beer")
a = data.frame("data"=char_array,"data2"=1:4)
a$data = substr(a$data,1,nchar(a$data)-3)

a 現在應該包含:

  data data2
1 foo_ 1
2 bar_ 2
3   ap 3
4    b 4

這是gsub的一種方法:

cs <- c("foo_bar","bar_foo","apple","beer")
gsub('.{3}$', '', cs)
# [1] "foo_" "bar_" "ap"   "b"

盡管這與@nfmcclure 的答案大致相同,但我更喜歡使用stringr包,因為它提供了一組函數,其名稱與基礎 R 中的函數名稱最為一致和具有描述性(事實上,我總是在谷歌上搜索“如何獲取數字R 中的字符數”,因為我不記得名字nchar() )。

library(stringr)
str_sub(iris$Species, end=-4)
#or 
str_sub(iris$Species, 1, str_length(iris$Species)-3)

這將從Species列的每個值中刪除最后 3 個字符。

使用stringi包也可以實現相同的效果

library('stringi')
char_array <- c("foo_bar","bar_foo","apple","beer")
a <- data.frame("data"=char_array, "data2"=1:4)
(a$data <- stri_sub(a$data, 1, -4)) # from the first to the last but 4th char
## [1] "foo_" "bar_" "ap"   "b" 

類似於@Matthew_Plourde 使用gsub

但是,如果原始字符串於要剪切的字符數,則使用將修剪為零字符的模式,即返回“”:

cs <- c("foo_bar","bar_foo","apple","beer","so","a")
gsub('.{0,3}$', '', cs)
# [1] "foo_" "bar_" "ap"   "b"    ""    ""

區別在於, {0,3}量詞表示 0 到 3 個匹配,而{3}需要正好 3 個匹配,否則找不到匹配,在這種情況下gsub返回原始的、未修改的字符串。

NB 使用{,3}將等同於{0,3} ,我只是更喜歡后一種表示法。

有關正則表達式量詞的更多信息,請參見此處: https : //www.regular-expressions.info/refrepeat.html

使用字符串的 n 個字符來切斷/替換時的友好提示:

--> 注意字符串中的空格!

使用base::gsub(' ', '', x, fixed = TRUE)去除字符串中不需要的空格。 我花了很多時間來找出為什么上面提供的出色解決方案對我不起作用。 認為它可能對其他人也有用;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM