Как объединить числа с отступом в R? - PullRequest
0 голосов
/ 29 января 2019

У меня есть этот набор данных из 8 целочисленных переменных, состоящий из одной или двух цифр, и я хочу объединить их, но дополнить числа 1 цифрой с 0 в начале.

Например, первый пример наизображение станет «1215020401010102».

Мне не нужны полные программные решения, только то, какие функции помогли бы мне в этом.Я пытался создать фукцию для использования с саппли, но не удалось.

Dataset

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вот один вариант с sprintf

do.call(sprintf, c(dat, fmt = "%02d%02d%02d"))
#[1] "030903" "041002" "060707" "100704" "030108"

Или с использованием tidyverse

library(tidyverse)
dat %>% 
   mutate_all(str_pad, pad = '0', width = 2) %>% 
   unite(V1, V1, V2, V3, sep='') 
   # or if there are many columns use
   # unite(V1, !!! rlang::syms(names(.)), sep='')

data

dat <- structure(list(V1 = c(3L, 4L, 6L, 10L, 3L), V2 = c(9L, 10L, 7L, 
 7L, 1L), V3 = c(3L, 2L, 7L, 4L, 8L)), class = "data.frame", row.names = c(NA, 
 -5L))
0 голосов
/ 29 января 2019

С учетом этих данных

set.seed(1)
(dat <- as.data.frame(matrix(sample(10, 15, T), nrow = 5)))
#  V1 V2 V3
#1  3  9  3
#2  4 10  2
#3  6  7  7
#4 10  7  4
#5  3  1  8

Мы можем использовать do.call с paste0 и lapply с formatC здесь:

do.call(paste0, lapply(dat, formatC, width = 2, flag = "0"))
# [1] "030903" "041002" "060707" "100704" "030108"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...