我对R非常陌生,在网上找不到一个简单的示例,说明如何从向量的每个元素(数组?)中删除最后n个字符。
我来自Java背景,所以我想做的是迭代每个元素,a$data
并从每个元素中删除最后3个字符。
你会怎么做?
我对R非常陌生,在网上找不到一个简单的示例,说明如何从向量的每个元素(数组?)中删除最后n个字符。
我来自Java背景,所以我想做的是迭代每个元素,a$data
并从每个元素中删除最后3个字符。
你会怎么做?
Answers:
这是我会做的一个例子。我希望这就是您要寻找的。
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)
现在应包含:
data data2
1 foo_ 1
2 bar_ 2
3 ap 3
4 b 4
strptime
)。
这是一种方法gsub
:
cs <- c("foo_bar","bar_foo","apple","beer")
gsub('.{3}$', '', cs)
# [1] "foo_" "bar_" "ap" "b"
gsub('.{5}$', '', 'abcd')
。
尽管这与@nfmcclure的答案基本相同,但我更喜欢使用stringr
package,因为它提供了一组函数,这些函数的名称比基R中的名称最一致和更具描述性(实际上,我一直在搜索“如何获取R”中的字符,因为我忘记了名称nchar()
)。
library(stringr)
str_sub(iris$Species, end=-4)
#or
str_sub(iris$Species, 1, str_length(iris$Species)-3)
这将从Species
列中每个值中删除最后3个字符。
stringr
软件包,有一个甚至更简单的解决方案: str_sub(iris$Species, end=-4)
类似于@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
sub()
代替gsub()
。
-3
,以-0
获得预期的效果!我有很多带有日期的数据,例如:"2014-03-27 23:00:00 GMT" "2014-03-31 00:00:00 BST"
-是的,两个时区在一起,并且as.Date函数返回意外结果(BST日期的前一天)-因此,我想删除时区标记,事实证明我必须会-0
消失,再加上几个小时