Это данные, которые у меня есть,
v11 <- c("00240031", "00310028")
v12 <- c("00000000", "00000000")
v13 <- c("00310064", "00180058")
data <- data.frame(v11, v12, v13)
data <- lapply(data, as.character)
testdata <- as.data.frame(data, stringsAsFactors = F)
testdata[testdata == '0'] <- '000000000'
testdata
Я хочу разбить каждый столбец (начиная с v11 до v99) на два столбца. Я использую substr
, чтобы разделить это так для первого столбца,
transform(v11, v11_a = substr(v11, 1, 4), v11_b = substr(v11, 5, 8))
X_data v11_a v11_b
1 00240031 0024 0031
2 00310028 0031 0028
Выглядит хорошо, кроме столбца X_data
. Я не хочу, чтобы это было на выходе. Есть ли лучший способ сделать это?
tidyr::separate
не будет применимо, так как мои данные относятся к типу символов?
v11 %>% separate(v11, into = c('v11_a', 'v11_b'), sep = 4)
Error in UseMethod("separate_") :
no applicable method for 'separate_' applied to an object of class "character"
Во-вторых, как я могу повторить процесс для последующих столбцов (например, с v11 по v99)?
В идеале, после разбиения и последующего преобразования в числовой тип мои окончательные данные должны выглядеть следующим образом:
> dataf
v11_a v11_b v12_a v12_b v13_a v13_b
1 24 31 0 0 31 64
2 31 28 0 0 18 58
Комментарий:
Удивительно, как быстро вы предлагаете удивительные решения. Спасибо вам всем.