如何使用dplyr在列的值中插入字母?

如何使用dplyr在列的值中插入字母?,r,dplyr,R,Dplyr,我想用以下条件在数据框的列的值中插入字符 例如,在值>999中插入AG0,如果它小于,则它将是“AG01000”,这里有五个选项。您只需要其中一个,选择与预期输出和首选项匹配的选项 库(dplyr) tibble(值=c(1,1010010090010002000))%>% 变异( x1=sprintf(“AG%05.0f”,数值), x2=粘贴0(如果其他(值>999,“AG0”,“AG00”),值), x3=粘贴0(当( 值>999~“AG0”, 真~“AG00”),值), x4=粘贴0(当

我想用以下条件在数据框的列的值中插入字符


例如,在值>999中插入AG0,如果它小于,则它将是“AG01000”,这里有五个选项。您只需要其中一个,选择与预期输出和首选项匹配的选项

库(dplyr)
tibble(值=c(1,1010010090010002000))%>%
变异(
x1=sprintf(“AG%05.0f”,数值),
x2=粘贴0(如果其他(值>999,“AG0”,“AG00”),值),
x3=粘贴0(当(
值>999~“AG0”,
真~“AG00”),值),
x4=粘贴0(当(
值>999~“AG0”,
值>99~“AG00”,
值>9~“AG000”,
真~“AG0000”),值),
#由@Frank建议
x5=粘贴0(“AG”,STREP(“0”,5-nchar(值)),值)
)
##tibble:6 x 6
#值x1 x2 x3 x4 x5
#                   
#1 1 AG00001 AG001 AG001 AG00001 AG00001
#2 10 AG00010 AG0010 AG0010 AG00010 AG00010
#3100AG00100AG00100AG00100AG00100AG00100AG00100AG00100
#4900 AG00900 AG00900 AG00900 AG00900 AG00900 AG00900
#5 1000 AG01000 AG01000 AG01000 AG01000 AG01000 AG01000 AG01000
#6 2000 AG02000 AG02000 AG02000 AG02000 AG02000 AG02000 AG02000
如果出于某种原因,数量超过几百个,那么性能可能是一个问题:

set.seed(2)
#浏览[4]>
大价值
头(大值)
# [1] 1850 7025 5734 1682 9436 9432
#浏览[4]>
微基准::微基准(
x1=sprintf(“AG%05.0f”,大值),
x2=粘贴0(如果其他(bigvalues>999,“AG0”,“AG00”),则为bigvalues),
x3=粘贴0(当(
bigvalues>999~“AG0”,
TRUE ~“AG00”)、bigvalues),
x4=粘贴0(当(
bigvalues>999~“AG0”,
bigvalues>99~“AG00”,
bigvalues>9~“AG000”,
真~“AG0000”)、大值),
x5=paste0(“AG”,strrep(“0”,5-nchar(bigvalues)),bigvalues)
)
#单位:微秒
#expr最小lq平均uq最大neval
#x1 548.0 567.95 614.107 603.65 634.55 953.6 100
#x2 1084.7 1150.90 1239.094 1191.75 1250.60 1854.0 100
#x3 1018.0 1070.35 1127.585 1104.50 1137.25 1693.2 100
#x4 1092.6 1144.30 1226.597 1177.20 1224.25 2251.2 100
#x5 1880.5 1970.15 2058.329 2011.00 2055.60 4035.4 100

(对不起,弗兰克。)

尝试
ifelse(值>999,“AGO1000”,“AGO999”)
或不使用ifelse
c(“AGO1000”,“AGO0999”)[1+(值%发生变异(newcol=case_when(值>999~“AGO1000”,“TRUE~“AGO0999”))
@akrun,我想OP想要AGO+实际值。所以我会在
ifelse
语句中添加一个
paste
。跳过
ifelse
并使用
sprintf(“AG%05.0f”,c(9991000))怎么样Bo'Auria,我注意到你有一个问问题而不接受任何答案。你能考虑回去吗?这样做不仅给回答者提供了一些优点,也给一些类似问题的读者提供了一些封闭。虽然你只能接受一个答案,但是你可以选择VOT。e尽可能多的你认为有帮助的问题。(如果仍然有问题,你可能需要编辑你的问题并提供更多的细节。)(说得清楚,BD'auria,我的意思是你每个问题只能接受一个答案…尽管它是“明显的”对我来说,这可能是因为我已经做了5多年了。你总是有权选择不回答,但是如果我的错误告诉你不要接受你的其他问题的答案,请考虑回去。很难理解这显示了4种方式,而不是一种非常复杂的方式。Fwiw,还有一种:
paste0(“AG”,strrep(“0”,5-nchar(值)),值)
我希望始终使用7个字符,而不是更多,在您的示例中,有像“AG001”这样的值谢谢(我想?)的“对不起”.Btw,如果有重复的值,可能也会有一些效率问题。我在这里发布了时间安排来说明,我想可能需要DT来加快速度(具体来说,记录在案)ct_zoo$id_animal=paste0(“AG”,strrep(“0”,5-nchar(ct_zoo$id_animal)),ct_zoo$id_animal)