r-按条件将字符添加到行中的特定值



假设我们有以下数据:

df1 = data.frame(cm= c('10129', '21120', '123456','345239'), 
num=c(6,6,6,6))
>  df1
cm      num
10129    6
21120    6
123456   6
345      4

如您所见,cm列中某些框的长度为6位,有些框为5位。我想对以下内容进行编码:如果cm列中的位数小于num列中的数字,则在前面加0值以获得给定的输出:

cm      num
010129    6
021120    6
123456    6
0345      4

您可以使用str_pad

library(tidyverse)
df1 %>% mutate(cm = str_pad(cm, num, "left", "0"))
#>       cm num
#> 1 010129   6
#> 2 021120   6
#> 3 123456   6
#> 4   0345   4

创建于2022-04-13由reprex包(v2.0.1(


输入数据

df1 <- data.frame(cm  = c('10129', '21120', '123456','345'), num = c(6,6,6,4))
df1
#>       cm num
#> 1  10129   6
#> 2  21120   6
#> 3 123456   6
#> 4    345   4

使用dplyrnchar可能最简单:

library(dplyr)
df1 %>% mutate(cm = if_else(nchar(cm) < num, paste0(0, cm), cm))
cm num
1  10129   6
2  21120   6
3 123456   6
4 345239   6

其他tidyverse/dplyr的答案更好,但如果您出于某种原因想坚持基本R:

df1$cm <- ifelse(nchar(df1$cm) < df1$num, paste0('0', df1$cm), df1$cm)
df1
#>       cm num
#> 1 010129   6
#> 2 021120   6
#> 3 123456   6
#> 4 345239   6

最新更新