如何在R语言中拆分双位数数值元素?
拆分双位数向量生成两列的简便方法
我有一个由双位数元素组成的向量,已将其放入数据框中。请问是否有简便方法拆分这些元素?例如如何基于向量中的数值生成两个额外列,如将23拆分为2和3?
combination <- c(11, 12, 13, 14, 15, 16, 23, 24, 25, 26, 34, 35, 36, 45, 46, 56) # How to do it smartly? crop.combinations <- rep(combination, each=num.rep)
方法一:基础R数学运算(高效简洁)
直接通过数学运算拆分十位和个位,无需字符串转换,适合纯数值向量,大向量场景下速度优势明显:
# 将重复后的向量转为数据框 df <- data.frame(comb = crop.combinations) # 提取十位:整除10 df$tens <- df$comb %/% 10 # 提取个位:取余10 df$units <- df$comb %% 10
方法二:字符串拆分法(直观易懂)
把数值转为字符串后拆分,适合需要处理特殊格式的场景:
df <- data.frame(comb = crop.combinations) # 转为字符串并按字符拆分 split_vals <- strsplit(as.character(df$comb), "") # 将拆分结果合并到原数据框 df <- cbind(df, do.call(rbind, split_vals)) # 重命名列名 colnames(df)[2:3] <- c("tens", "units") # 可选:将字符型结果转回数值型 df$tens <- as.integer(df$tens) df$units <- as.integer(df$units)
方法三:tidyverse工具链(代码流畅)
如果习惯使用tidyverse系列包,可借助separate函数一步完成拆分与类型转换:
library(tidyverse) df <- tibble(comb = crop.combinations) %>% # 将comb转为字符串,从第1个字符后拆分,自动转换为数值型 separate(as.character(comb), into = c("tens", "units"), sep = 1, convert = TRUE)
内容的提问来源于stack exchange,提问作者Aoxiang Xin
相关产品推荐
相关产品推荐

