将长十六进制字符串拆分为列值并转换为十进制

split long hex string into column values and convert to decimal

使用如下所示的数据框,我需要将 hex_string 列转换为 30 列,方法是将它们分成 4 个十六进制字符 - 我为此查看了 tidyr,但了解不够完成这项工作,但更喜欢基于 tidyr 的解决方案。这些十六进制字符需要在最终输出中进一步转换为十进制值 table.

df <- data.frame(
  id=c(1,2,3,4),
  loc=c("loc1", "loc2", "loc2", "loc3"),
  hex_string = c(
    "0x005000500050005000400040005000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050",
    "0x004000400040004000400040004000400040004000400040800080008000800080008000800080008000800080008000800080008000800080008000",
    "0x01000100010000f000f000f000f000f000f000f000f000f000f000f000f000f00100010000f000f000f000f000f000f000f000f000f000f000f000f0",
    "0x800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000"
    )
  )
library(tidyr)

df %>% 
       # remove the hex prefix
       mutate(hex_string = substring(hex_string, 3)) %>% 

       # use separate to split the column into 30 columns
       separate(hex_string, paste("V", 1:30, sep = ""), sep = (1:29) * 4) %>% 

       # add the hex prefix
       mutate_at(vars(starts_with("V")), funs(paste("0x", . , sep = "")))

#  id  loc     V1     V2     V3     V4     V5     V6     V7     V8     V9    V10
#1  1 loc1 0x0050 0x0050 0x0050 0x0050 0x0040 0x0040 0x0050 0x0050 0x0050 0x0050
#2  2 loc2 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040
#3  3 loc2 0x0100 0x0100 0x0100 0x00f0 0x00f0 0x00f0 0x00f0 0x00f0 0x00f0 0x00f0
#4  4 loc3 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000
# ... more columns