【发布时间】:2019-01-16 10:37:15
【问题描述】:
这是我的数据,
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
评论:
您想出令人惊叹的解决方案的速度之快令人惊叹。谢谢你们。
【问题讨论】: