我有一个数据框dt:
dt <- data.frame(id=c(1,2,3),value=c("a","_b","c"))
现在我想为每个&#39;值添加前缀_&#39;不以_开头,因此结果数据框应为
id, value
1, _a
2, _b
3, _c
我知道我可以使用substr函数来检查一个值是否以_开头,但我不想用循环来做。我想使用apply函数。我该怎么办?顺便说一句,我是新申请职能的。
---编辑:感谢所有人的解决方案。对不起,但我过度简化了我的真实情况。在我的实际情况中,我必须将前缀_添加到不以&amp ;,不同符号开头的值。 ---编辑2:只是意识到它是一样的。以下将做
dt$value <- gsub("^([^&].*)", "_\\1", dt$value)
答案 0 :(得分:1)
我们可以使用sub
来匹配字符串开头(_
)不是[^_]
(^
)的字符,将其捕获为一个组( (...)
)并将其替换为_
后跟已捕获组的反向引用(\\1
)
levels(dt$value) <- sub("^([^_])", "_\\1", levels(dt$value))
dt$value
#[1] _a _b _c
#Levels: _b _a _c
答案 1 :(得分:1)
虚拟解决方案,但有效......将{strong>每个字符串的开头替换为_
,如果有两个_
(__
)则返回一个
dt$value <- sub("__", "_", sub("^", "_", dt$value))
dt$value
#[1] "_a" "_b" "_c"
答案 2 :(得分:1)
另一种选择......
dt$value <- gsub("^([^_].*)", "_\\1", dt$value)
dt
id value
1 1 _a
2 2 _b
3 3 _c
第一个正则表达式查找字符串的开头,后跟不是_
的内容,加上任何后续字符,并将其替换为第二个正则表达式,即_
加上来自的捕获组第一个正则表达式。