按条件将字符添加到行中的特定值
Add character to specific value in rows by condition
假设我们有以下数据:
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
也许使用 dplyr
和 nchar
最简单:
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
您可以使用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
由 reprex package (v2.0.1)
于 2022-04-13 创建
输入数据
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
其他 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
假设我们有以下数据:
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
也许使用 dplyr
和 nchar
最简单:
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
您可以使用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
由 reprex package (v2.0.1)
于 2022-04-13 创建输入数据
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
其他 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