You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言二进制数位提取:从字符串中分离指定位并生成新列

从二进制字符串提取指定数位并生成新列(R语言)

首先明确:二进制字符串的数位计数要先搞清楚是从左数还是从右数,比如'00110011':

  • 左数第6位是0,第7位是1
  • 右数第6位是1,第7位是1

最优方案:直接操作字符串(无需转整数)

因为你的数据是字符串格式的二进制,直接按位置提取是最直观高效的,不管是单个值还是批量处理CSV都适用:

1. 单个二进制字符串的提取

data <- '00110011'

# 提取左数第6位
digit_6_left <- substr(data, 6, 6)
# 提取左数第7位
digit_7_left <- substr(data, 7, 7)

# 如果是从右数
digit_6_right <- substr(data, nchar(data)-6+1, nchar(data)-6+1)
digit_7_right <- substr(data, nchar(data)-7+1, nchar(data)-7+1)

2. 处理CSV文件,生成新列

假设你的CSV读入后是数据框df,二进制列名为binary_col:

# 读入CSV
df <- read.csv("your_dota_data.csv")

# 生成左数第6、7位的新列(字符型)
df$digit_6 <- substr(df$binary_col, 6, 6)
df$digit_7 <- substr(df$binary_col, 7, 7)

# 如果需要转成数值型
df$digit_6 <- as.integer(df$digit_6)
df$digit_7 <- as.integer(df$digit_7)

如果习惯用stringr包,提取从右数的数位会更简洁:

library(stringr)

# 右数第6位
df$digit_6_right <- str_sub(df$binary_col, -6, -6)
# 右数第7位
df$digit_7_right <- str_sub(df$binary_col, -7, -7)

关于你原有代码的问题

你的代码里有几个小错误(比如For应该小写for,变量名I和i、Bits和bits大小写不一致),而且转整数后计算的是从右数的数位:比如bits[1]是右数第1位,bits[8]是左数第1位。如果用原有逻辑提取左数第6、7位,对应的是bits[3]和bits[2],但这种方法绕了一圈,不如直接操作字符串高效直观,尤其是批量处理大量数据时。

内容的提问来源于stack exchange,提问作者kenhood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:42:48