Я хочу использовать функцию string str_pad
, чтобы создать столбец в нужном мне формате, который включает заполнение нулями чисел в столбце «Код» до 3 цифр.
Я запустил этот код:
Animals %>%
gather(most_common, cnt, M:OG) %>%
group_by(name) %>%
slice(which.max(cnt)) %>%
arrange(code)
В результате получилась следующая табличка:
Code Name most_common
32 Monkey Africa
33 Wolf Europe
34 Tiger Asia
35 Godzilla Asia
#With 1 234 more rows
Я доволен своим кодом выше. Однако, поскольку я собираюсь объединить этот df позже, мне нужно, чтобы столбец «Код» состоял из трех цифр с нулевым дополнением (т.е. в формате «nnn» / «032»), как это:
Code Name most_common
032 Monkey Africa
033 Wolf Europe
034 Tiger Asia
035 Godzilla Asia
#With 1 234 more rows
Я запустил string str_pad($code, $3, $0)
, но это не работает. Думаю, там что-то не так. Должен ли я запускать этот код в любом месте своего фрагмента или с помощью %>%
?
Разве все ссылки на пакет "string"
не должны быть "stringr"
? Я бы просто отредактировал, но поскольку OP не включает пример сбоя, неясно, что пошло не так. Просьба уточнить.
Возможное решение:
library(tidyverse)
df <- read.table(text = "Code Name most_common
32 Monkey Africa
33 Wolf Europe
34 Tiger Asia
35 Godzilla Asia", header = T)
df %>%
mutate(Code = str_pad(Code, width = 3, pad = "0"))
#> Code Name most_common
#> 1 032 Monkey Africa
#> 2 033 Wolf Europe
#> 3 034 Tiger Asia
#> 4 035 Godzilla Asia
Спасибо @PaulS. Это сработало, когда я использовал mutate(Code = str_pad(Code, width = 3, pad = "0"))
вместе с первым упомянутым кодом. :)
В base R
мы можем использовать sprintf
df1$Code <- sprintf("%03d", df1$Code)
Другим вариантом может быть использование formatC
с «d» для целого числа и флаг «0» перед предшествующим нулем, например:
df$Code <- formatC(df$Code, width = 3, format = "d", flag = "0")
df
#> Code Name most_common
#> 1 032 Monkey Africa
#> 2 033 Wolf Europe
#> 3 034 Tiger Asia
#> 4 035 Godzilla Asia
Created on 2022-07-23 by the reprex package (v2.0.1)
Альтернатива:
df %>% mutate(Code = paste0(0,Code))
.