![](/img/trans.png)
[英]R How to conditionally remove the last N characters from multiple observations
[英]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 個字符。
類似於@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.